我有一个字符串列表(在本例中为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)
这可能吗,我该怎么做?
最佳答案
text.replaceAll("(?i)(?<!\\B@\\S{1,20})y+", "y");
有效。当前版本的Java支持可变长度lookbefore,只要它明显小于look-before的最大长度即可。
由于twitter用户名具有固定的最大长度,因此,beforebefore可变长度上的固定的最大长度解决了该问题。