我有一个模式' NewTree'我想得到所有不包含这种模式的字符串' NewTree'。如何使用正则表达式进行过滤?
所以,如果我有1.BoostKite 2.SetTree 3. ComeNewTreeNow
然后输出应该是BoostKite和SetTree。 有什么建议?我想要可以在任何地方工作的正则表达式,而不是使用任何特定于语言的函数。
答案 0 :(得分:3)
如果您想使用正则表达式,可以尝试使用否定前瞻。
^(?!.*NewTree).*$
或者,你可以在上下文中使用交替运算符,将你要排除的内容放在左边,(说扔掉它,它是垃圾)并在捕获组中放置你想要匹配的内容右边。
\w*NewTree\w*|([a-zA-Z]+)
在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
。