regex Python正则表达式不匹配时添加额外的文本,并在pattern和text [duplicate]

gzszwxb4  于 2023-06-25  发布在  Python
关注(0)|答案(2)|浏览(72)

此问题已在此处有答案

What special characters must be escaped in regular expressions?(13个回答)
3天前关闭锁定6天此时有disputes about this question’s content正在解决。它目前不接受新的答案或交互。
我尝试匹配“Python 3.11.4(64-bit)Setup”如下:

re.match(r"Python (\d.)+\d (64-bit) Setup", "Python 3.11.4 (64-bit) Setup")

然而,由于某种原因,它不起作用。但是,当我尝试

re.match(r"(\d.)+\d", "3.11.4")

完全吻合。我该怎么解决?
我的最终目标实际上是将它与这个模式相匹配:

^Python (\d.)+\d( \(\d+-bit\))? Setup$
pgccezyw

pgccezyw1#

两个错误:

  • 括号(和点)不转义
  • (\d.)不匹配,例如11.

工作版本:

r"Python (\d+\.)+\d \(64-bit\) Setup"
ujv3wf0j

ujv3wf0j2#

”““但是,出于某种原因,它不起作用。但当我尝试"*
re.match(r"(\d.)+\d", "3.11.4") *
”““它非常匹配。我该怎么解决?..."*
它没有匹配整个字符串,只是找到了一个匹配项。

match = re.match(r'(\d.)+\d', '3.11.4')
print(match.group())

输出量

3.1

\d语法将匹配单个数字,* 0 * 到 * 9 *。
要匹配数字序列,请附加 + 量词-\d+
此外,对点字符进行转义也是一个很好的做法,它将匹配任何字符。

match = re.match(r'(\d+\.)+\d+', '3.11.4')
print(match.group())

输出量

3.11.4

因此,您必须重构您的模式,以考虑这个文本,因为您使用^$语法,以匹配行的开始和结束。

^Python (\d+\.)+\d+( \(\d+-bit\))? Setup$

这里有一个例子。

string = 'Python 3.11.4 (64-bit) Setup'
match = re.match(r'^Python (\d+\.)+\d+( \(\d+-bit\))? Setup$', string)
print(match.group(1))
print(match.group(2))

输出量

11.
 (64-bit)

相关问题