如何使用正则表达式排除特定单词?

时间:2013-05-19 14:34:47

标签: regex

我在这里遇到问题,我有以下字符串

@Novriiiiii yauda busana muslim @nencor haha. wa'alaikumsalam noperi☺

然后我使用这个正则表达式模式来选择所有字符串

\w+

但是,我需要选择所有字符串,除了前缀为@ like @Novriiiiii@nencor 的单词,这意味着我们必须排除@word的

我该怎么做?

PS。我正在使用regexpal来编译正则表达式。我想将正则表达式模式应用到雅虎管道正则表达式。谢谢

6 个答案:

答案 0 :(得分:2)

你可以使用负面的lookbehind,这样如果一个单词前面有@,它就会被排除在外。你还需要在单词之前使用单词边界,否则lookbehind只会影响第一个单词。

(?<!@)\b\w+

http://rubular.com/r/ONEl70Am5Q

答案 1 :(得分:0)

这是否符合您的需求?

http://rubular.com/r/uuXvNrUiGJ

[^@\w+]\w+

答案 2 :(得分:0)

这确实是你唯一的问题:

[^@\w+][\w.]+

点击此链接:http://regexr.com?34tq7

答案 3 :(得分:0)

如果您不能像其他答案已经建议那样使用负面的后视,这是一种解决方法。

\w已经与@字符不匹配,所以您需要这样的内容:

[^@]\w+

但是这将(a)在字符串的开头不起作用,(b)在匹配中的单词之前包含字符。要修复(a),我们可以这样做:

(^|[^@])\w+

为了修复(b),我们将我们想要的部分括起来:

(^|[^@])(\w+)

然后使用$2\2(取决于正则表达式方言)来引用匹配的单词。

答案 4 :(得分:0)

另一种选择是在单词中包含@符号:

[\w@]+

然后在管道中添加另一个步骤,以过滤掉以@开头的所有字词。

答案 5 :(得分:0)

这样做的方法是删除您不想要的单词。例如:

find: @\w+
replace: empty string

你获得没有 @abcdef 字样的文字。