Python正则表达式re.findall失败

2024-03-28 23:48:38 发布

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

有人能帮我弄清楚这是怎么回事吗? 我想得到任何后跟“m”或“y”的数字

为什么re.search()工作正常,而re.findall()在搜索字符串时失败

a = ['COP' , '\t\t\t', 'Basis', 'Notl', 'dv01', '6m', '9m', '1y',
     '18m', '2y', '3y', "15.6", 'mm', '4.6', '4y', '5y', '10', 'mm',
     '4.6', '6y', '7y', '8y', '9y', '10y', '20y', 'TOTAL', '\t\t9.2']


rule = re.compile(r"^\d+[ym]$")
COP = [re.search(rule, entry)[0] for entry in a if (re.search(rule, entry))]
print(COP)
# OUTPUT >> ['6m', '9m', '1y', '18m', '2y', '3y', '4y', '5y', '6y', '7y', '8y', '9y', '10y', '20y']

然而

rule1 = re.compile(r"\d+[ym]$")
a_str = " ".join(a) 
COP1 = re.findall(rule1, a_str)
print(COP1)
# OUTPUT >> []

我尝试了多种选择,但都无济于事


Tags: reoutputsearch数字rulemmprintentry
1条回答
网友
1楼 · 发布于 2024-03-28 23:48:38

您正在使用带有start&;的正则表达式;结束说明:^\d+[ym]$(好吧,好吧,^已经被删除了,但这是相同的问题)

它适用于单个字符串,但一旦您加入字符串以创建一种句子,您的表达式就不再匹配

摆脱start&;结束并使用单词边界:r"\b\d+[ym]\b"(注意原始字符串前缀,这是\b所必需的)

import re
r = re.compile(r"\b\d+[ym]\b")
>>> r.findall("6y 67m")
['6y', '67m']

(不使用单词边界将匹配您不希望匹配的字符串,例如xx56yz

相关问题 更多 >