我有一个字符串列表(在本例中为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可变长度上的固定的最大长度解决了该问题。

09-12 06:22