2

我有一个字符串列表(在这种情况下是来自 Twitter 的推文)。这些字符串由用户发布,有时会引用其他特定用户。我正在使用正则表达式和 Java 的 String.replaceAll(pattern, replace) 方法来替换语音常见问题的实例(在这种情况下,重复辅音),但我需要一种方法让它忽略它在用户名中找到的任何模式. 用户名模式普遍匹配正则表达式\b@\S+\b

所以我想匹配y+,但不是任何匹配的成员\b@\S+\b

所以everybodyy @everybodyy everybodyy我会匹配ever(y)bod(yy) @everybodyy ever(y)bod(yy)

这可能吗,我该怎么做?

4

2 回答 2

2

text.replaceAll("(?i)(?<!\\B@\\S{1,20})y+", "y");作品。当前版本的 Java 支持可变长度的lookbefore,只要它显式地小于look-before 的某个最大长度大小。

由于 twitter 用户名有一个固定的最大长度,可变长度的固定最大值lookbefore 解决了这个问题。

于 2013-03-08T17:16:43.213 回答
0

尝试以下操作:

String regEx = "(\\s+[^@\\s]\\S*y+\\S*)|(^[^@\\s]\\S*y+\\S*)";
于 2013-03-08T17:37:23.937 回答