2011-03-07 40 views
2

在Python中,我可以使用子(一個替代品的功能),這是非常強大的一些情況,像這樣:如何在java中做正則表達式替換函數?

def replacer(match): 
    s = match.group(0) 
    if s.startswith('/'): 
     return "" 
    else: 
     return s 
return re.sub(pattern, replacer, text) 

如何做到這一點在Java中?

+0

寫一個你自己:-)或者,更好的是,找到一個這樣做的庫。它大約需要10-15行的幫助函數來遍歷匹配結果,並使用子字符串來替換,這取決於使用String - > String(或whatnot)賦值方法調用某個接口的結果。 – 2011-03-07 02:36:05

回答

4

在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)來避免錯誤。

1

你不能用Java來做到這一點。

Matcher類中的replace *方法需要一個String參數來指定替換。您正在嘗試執行的操作需要使用不同簽名的替換方法。

您甚至不能通過創建Matcher的子類來破解解決方案:它是最終的類。

+0

你不能用Java中的一行來完成它。 (當然,你也不能在Python中定義一個方法。)我不明白爲什麼使用匹配器來循環將不起作用。 – 2011-03-07 02:51:21

+0

我的觀點是,他無法用蟒蛇的整潔方式去做;即通過將自定義*行爲*插入到替換過程中。我認爲這就是問題所在。 – 2011-03-07 03:14:58