我有一个字符串列表(在这种情况下来自Twitter的推文)。这些字符串由用户发布,有时也会引用其他特定用户。我使用正则表达式和Java的String.replaceAll(模式,替换)方法来替换语音常见问题的实例(在这种情况下,重复辅音),但我需要一种方法使它忽略它在用户名中找到的任何模式。用户名模式通常与正则表达式\b@\S+\b
所以我想匹配y+
,但不是匹配\b@\S+\b
所以在everybodyy @everybodyy everybodyy
我会匹配ever(y)bod(yy) @everybodyy ever(y)bod(yy)
这可能,我该怎么做?
答案 0 :(得分:2)
text.replaceAll("(?i)(?<!\\B@\\S{1,20})y+", "y");
有效。当前版本的Java支持可变长度的前瞻,只要它明显小于前瞻的某个最大长度大小。
由于Twitter用户名具有固定的最大长度,因此可变长度上的固定最大值可以解决问题。
答案 1 :(得分:0)
尝试以下方法:
String regEx = "(\\s+[^@\\s]\\S*y+\\S*)|(^[^@\\s]\\S*y+\\S*)";