在Java中使用正则表达式来选择性地查找模式

时间:2013-03-08 16:32:33

标签: java regex twitter pattern-matching

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

匹配

所以我想匹配y+,但不是匹配\b@\S+\b

的任何内容的成员

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

这可能,我该怎么做?

2 个答案:

答案 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*)";