1
4

6 回答 6

2

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

(?<!@)\b\w+

http://rubular.com/r/ONEl70Am5Q

于 2013-05-19T14:38:07.333 回答
0

这确实会解决您的问题:

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

检查此链接:http ://regexr.com?34tq7

于 2013-05-19T14:43:03.053 回答
0

如果您不能像其他答案已经建议的那样使用否定的lookbehind,这里有一个解决方法。

\w已经不匹配@字符,所以你想要这样的东西:

[^@]\w+

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

(^|[^@])\w+

为了修正 (b),我们用括号括住我们想要的部分:

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

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

于 2013-05-19T14:44:10.690 回答
0

这符合您的需求吗?

http://rubular.com/r/uuXvNrUiGJ

[^@\w+]\w+
于 2013-05-19T14:39:49.173 回答
0

一种方法是删除您不想要的单词。例子:

find: @\w+
replace: empty string

您获得没有@abcdef字样的文本。

于 2013-05-19T15:11:42.603 回答
0

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

[\w@]+

然后在您的管道中添加另一个步骤以过滤掉所有以@.

于 2013-05-19T14:47:22.970 回答