在Python中,我可以使用子(一個替代品的功能),這是非常強大的一些情況,像這樣:如何在java中做正則表達式替換函數?
def replacer(match):
s = match.group(0)
if s.startswith('/'):
return ""
else:
return s
return re.sub(pattern, replacer, text)
如何做到這一點在Java中?
在Python中,我可以使用子(一個替代品的功能),這是非常強大的一些情況,像這樣:如何在java中做正則表達式替換函數?
def replacer(match):
s = match.group(0)
if s.startswith('/'):
return ""
else:
return s
return re.sub(pattern, replacer, text)
如何做到這一點在Java中?
在Java中,有一個成語:
Pattern pattern = Pattern.compile(yourPattern);
Matcher matcher = patern.matcher(yourString);
while (matcher.find()) {
String group = matcher.group(0);
// do your if statement
}
一個建議,這不是很明顯從文件 - 如果yourString中有特殊(REG EXP)字符,它是使用matcher.appendReplacement(重要stringBuffer)和matcher.appendTail(stringBuffer)來避免錯誤。
你不能用Java來做到這一點。
Matcher類中的replace *方法需要一個String參數來指定替換。您正在嘗試執行的操作需要使用不同簽名的替換方法。
您甚至不能通過創建Matcher的子類來破解解決方案:它是最終的類。
你不能用Java中的一行來完成它。 (當然,你也不能在Python中定義一個方法。)我不明白爲什麼使用匹配器來循環將不起作用。 – 2011-03-07 02:51:21
我的觀點是,他無法用蟒蛇的整潔方式去做;即通過將自定義*行爲*插入到替換過程中。我認爲這就是問題所在。 – 2011-03-07 03:14:58
寫一個你自己:-)或者,更好的是,找到一個這樣做的庫。它大約需要10-15行的幫助函數來遍歷匹配結果,並使用子字符串來替換,這取決於使用String - > String(或whatnot)賦值方法調用某個接口的結果。 – 2011-03-07 02:36:05