2015-04-18 17:16:31 +0000 2015-04-18 17:16:31 +0000
20
20

我应该如何写一个regex来匹配一个特定的单词?

我一直在尝试让一个特定的regex工作,但我不能让它按照我的要求来做。regex应该与ROCKET匹配,大写或小写,带或不带标点符号,但不能与另一个词的一部分匹配。所以,regex会在以下任何一个词上触发:

rocket
RoCKEt
hi Rocket
This is a rocket.
ROCKET's engine

,但在ROCKET上不会触发,当它在

Rocketeer
Sprocket

之类的词中被发现时,我一直在尝试用网上的regex生成器来正确地处理,但我无法让它完全匹配。

答案 (4)

11
11
11
2015-04-18 17:32:40 +0000

我建议你把MSDN正则表达式快速参考

作为书签,如果你想实现由非字母数字字符包围的 “火箭 "一词的大小写不敏感匹配。可以使用的gex是:

\W*((?i)rocket(?-i))\W*

它要做的是寻找零或更多的非字母数字字符(*),然后是一个不区分大小写的 rocket (?i)rocket(?-i)),再加上零或更多的非字母数字字符(\W)。在火箭匹配词周围的额外的括号将匹配词分配到一个单独的组中。

**更新1:* Matt在评论中说,这个regex是在python中使用的。Python有一个略微不同的语法。要在python中实现同样的结果,使用这个regex,并将re.IGNORECASE选项传递给compilematch函数。他发布了一个更好的解决方案,即

\W*(rocket)\W*

10
10
10
2015-04-19 06:17:43 +0000

我认为在这种情况下,look-aheads是矫枉过正的,你最好用ignorecase选项,

\brocket\b

,换句话说,在python中:

>>> x="rocket's"
>>> y="rocket1."
>>> c=re.compile(r"\brocket\b",re.I) # with the ignorecase option
>>> c.findall(y)
[]
>>> c.findall(x)
['rocket']
1
1
1
2015-04-19 04:00:42 +0000

grepsed,可以使用\<rocket\>.  用grep选项可以使其不区分大小写(ignore case):

grep -i '\<rocket\>'

我不知道有什么方法可以使所有的-i regexes不区分大小写,但总有穴居人的方法:

sed -n '/\<[Rr][Oo][Cc][Kk][Ee][Tt]\>/p'
0
0
0
2019-11-23 10:06:05 +0000

这是个很老的线程,所以贴出来给有需要的人看,以后再来。发帖的人可能已经转到别的地方去了。不知道?