繁体   English   中英

如何在python中使用正则表达式排除特定字符串?

[英]How to exclude specific string using regex in Python?

我想匹配以下字符串:

45 meters?
45, meters?
45?
45 ?

但不是像这样的字符串:

45 meters you?
45 you  ?
45, and you?

在两种情况下,问号都必须在末尾。 因此,从本质上讲,我想排除所有包含单词“ you”的字符串。

我已经尝试过以下正则表达式:

'\d+.*(?!you)\?$'

但它匹配第二种情况(可能是因为.*

你可以试试这个正则表达式匹配所有不具备串线you? 最后,

^(?!.*you).*\?$

说明:

此正则表达式中使用负前瞻。 它实际上意味着什么,它将检查包含字符串you 它匹配除包含字符串you的行以外的所有行。

演示

有一个巧妙的技巧可以从正则表达式中排除某些匹配项,您可以在此处使用它:

>>> import re
>>> corpus = """
... 45 meters?
... 45?
... 45 ?
... 45 meters you?
... 45 you  ?
... 45, and you?
... """
>>> pattern = re.compile(r"\d+[^?]*you|(\d+[^?]*\?)")
>>> re.findall(pattern, corpus)
['45 meters?', '45?', '45 ?', '', '', '']

不利的一面是,当排除事件开始时,您会得到空的匹配,但很容易将它们过滤掉:

>>> filter(None, re.findall(pattern, corpus))
['45 meters?', '45?', '45 ?']

这个怎么运作:

诀窍是我们只注意捕获的组...因此,交替的左侧- \\d+[^?]*you (或“数字后跟非-字符后跟'you'”)匹配您不需要的东西,然后我们就忘了。 仅当左侧不匹配时,右侧- (\\d+[^?]*\\?) (或“数字后跟非?字符后跟'?”)-匹配,并且那个被捕获。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM