Python 正则表达式:结果不是预期的

Python 正则表达式:结果不是预期的,python,regex,Python,Regex,预期产量 import re pattern = "[0-9]+[st|nd|rd|th]?" str2 = "1st 1 2 3 4 5th " a = re.findall(pattern, str2) print(a) 实际产量 ['1st', '1', '2', '3', '4', '5th'] 重新导入 图案=r'[0-9]+(?:圣约翰第四大道第四大道)?' str2=“第一个1 2 3 4第五个” a=关于findall(模式,str2) 印刷品(a) 输出: ['1st',

预期产量

import re
pattern = "[0-9]+[st|nd|rd|th]?"
str2 = "1st 1 2 3 4 5th "
a = re.findall(pattern, str2)
print(a)
实际产量

['1st', '1', '2', '3', '4', '5th']
重新导入
图案=r'[0-9]+(?:圣约翰第四大道第四大道)?'
str2=“第一个1 2 3 4第五个”
a=关于findall(模式,str2)
印刷品(a)
输出:
['1st','1','2','3','4','5th']

你的错误是用方括号而不是圆括号。方括号通常用于表示范围(如0-9),而不是后缀中所需的“或”。进一步阅读:

如果只更改括号,输出将如下所示:


这仍然不是您想要的,所以我们对模式进行了第二次更改:添加
?:
是创建非捕获组的语法(表示“将其视为一个组”)。

尝试将方括号替换为圆括号@用户8408080,非常感谢![st | nd | rd | th]确实要求正则表达式匹配s,t | n,d | r,d | t,h.“[0-9]+(?:st | nd | rd | th)?”请使用这个表达式来省去合并元组的麻烦:)@PythonNewbie你完全正确。我正在编辑我的帖子
['1s', '1', '2', '3', '4', '5t']