繁体   English   中英

如何使用正则表达式在数字之前找到以“n't”结尾的单词?

[英]How can I find a word ending with "n't" before a number using Regex?

我想用这个正则表达式'n't [0-9]+(\\.[0-9][0-9]?)?'在一个句子中找到所有的“n't” . 它在RegExr 中工作正常:

在此处输入图片说明

但是当我尝试使用此代码执行此操作时,它不起作用:

txt = "japan isn't 56 country in Europe."
nt = re.findall(r"n't [0-9]+(\.[0-9][0-9]?)?",txt)
print(nt)

当涉及到括号时findall 一旦你把它们放在那里,它只会返回该组的结果,而不是整个比赛的结果。 您可以使括号不被捕获:

>>> nt = re.findall(r"n't [0-9]+(?:\.[0-9][0-9]?)?",txt)
>>> print(nt)
["n't 56"]

这是您的脚本的一个微妙问题,以下修复了该问题:

txt = "japan isn't 56 country in Europe."
nt = re.findall(r"n't [0-9]+(?:\.[0-9][0-9]?)?",txt)
print(nt)    # prints ["n't 56"]

在您对re.findall的最初调用中,您使用了以下模式:

n't [0-9]+(\.[0-9][0-9]?)?

这意味着第一个捕获组是可选术语.123 使用re.findall API,如果您指定一个捕获组,那么它将返回。 鉴于您的输入包含该组,您的结果列表为空。 在我更正的版本中,我使用?:使捕获组处于非活动状态 如果您指定任何显式捕获组,则将返回整个匹配模式,这是您在此处想要的行为。

暂无
暂无

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

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