python中的regex不能在pythox中工作,但在python3.6中不行

2024-05-14 00:09:08 发布

您现在位置:Python中文网/ 问答频道 /正文

这个regex可以在pythox中工作,但在python3.6中不行。我不知道为什么:

Pythex link (click)

python代码:

import re
test = '105297  003  002394  o  0000  20891  0.00  1'
pattern = r"(?P<pun1>\d{3})\s+(?P<pun2>\d{6})(\s+(?P<pun3>[01oO])(\s+(?P<pun4>\d{4}))?)?\s.*\s(?P<amt>\d+\.\d\d)\s"
match = re.match(pattern, test, re.IGNORECASE)
match is None
True

我还不明白为什么它在pythox中有效,但在python解释器中却不行。在


Tags: 代码testimportrematchlinkregexpattern
3条回答

我怀疑您的问题来自于调用re.match而不是{a1}。re.search函数试图在给定字符串中查找正则表达式,而re.match则要求正则表达式在字符串的开头匹配。在

更改此项:

match = re.match(pattern, test, re.IGNORECASE)

为此:

^{pr2}$

您可能在找re.search()而不是re.match()。后者只在字符串的开头匹配(意味着有一个锚^,即:

match = re.search(pattern, test, re.IGNORECASE)
#            ^^^
if match:
    # change the world here

a demo on regex101.com。在

问题是match()用于匹配字符串的开头,而不是任何地方。 来自python文档:(Python docs for match()

如果字符串的开头的有零个或多个字符与此正则表达式匹配,则返回相应的匹配对象

您应该改用search(): 如果要在字符串中的任何位置找到匹配项,请改用search()

see also search() vs. match()

本部分:

match = re.match(pattern, test, re.IGNORECASE)

必须是:

^{pr2}$

相关问题 更多 >