正则表达式,包含不包含模式的所有字符串

时间:2014-07-10 21:41:16

标签: regex

我有一个模式' NewTree'我想得到所有不包含这种模式的字符串' NewTree'。如何使用正则表达式进行过滤?

所以,如果我有1.BoostKite 2.SetTree 3. ComeNewTreeNow

然后输出应该是BoostKite和SetTree。 有什么建议?我想要可以在任何地方工作的正则表达式,而不是使用任何特定于语言的函数。

3 个答案:

答案 0 :(得分:3)

如果您想使用正则表达式,可以尝试使用否定前瞻

^(?!.*NewTree).*$

Live Demo

或者,你可以在上下文中使用交替运算符,将你要排除的内容放在左边,(说扔掉它,它是垃圾)并在捕获组中放置你想要匹配的内容右边。

\w*NewTree\w*|([a-zA-Z]+)

Live Demo

在Python中:

字符串在列表上下文中,正如您在上面评论'数组'

>>> import re
>>> regex = re.compile(r'^(?!.*NewTree).*$')
>>> mylst = ['BoostKite', 'SetTree', 'ComeNewTree', 'NewTree']
>>> matches = [x for x in mylst if regex.match(x)]
['BoostKite', 'SetTree']

如果它只是一长串多个单词而你想忽略包含NewTree的单词

>>> s = '1.BoostKite 2.SetTree 3. ComeNewTreeNow 4. foo 5. bar'
>>> filter(None, re.findall(r'\w*NewTree\w*|([a-zA-Z]+)', s))
['BoostKite', 'SetTree', 'foo', 'bar']

您也可以在没有正则表达式的情况下执行此操作。

>>> mylst = ['BoostKite', 'SetTree', 'ComeNewTree', 'NewTree']
>>> matches = [x for x in mylst if "NewTree" not in x]
['BoostKite', 'SetTree']

答案 1 :(得分:0)

将每个单词与正则表达式\w+NewTree\b匹配。如果以true

结尾,则返回NewTree

使用i修饰符进行不区分大小写的匹配(忽略[a-zA-Z]的情况)


如果您想匹配\w*字词,请在上面的正则表达式中使用\w+代替NewTree

如果您要查找包含NewTree,请尝试使用此正则表达式\w*NewTree\w*\b

答案 2 :(得分:0)

我认为您可以通过以下示例的方式针对您的具体情况执行此操作:

^(([^N]|N[^e]|Ne[^w]|New[^T]|NewT[^r]|NewTr[^e]|NewTre[^e])+)?(.|..|...|....|.....)?$

到目前为止,我所拥有的是一个接近错过。它不匹配任何具有子串NewTree的字符串。但它不会匹配每个没有子串NewTree的字符串。特别是它不匹配Nvwxyz