有人能帮我弄清楚这是怎么回事吗? 我想得到任何后跟“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 >> []
我尝试了多种选择,但都无济于事
您正在使用带有start&;的正则表达式;结束说明:
^\d+[ym]$
(好吧,好吧,^
已经被删除了,但这是相同的问题)它适用于单个字符串,但一旦您加入字符串以创建一种句子,您的表达式就不再匹配
摆脱start&;结束并使用单词边界:
r"\b\d+[ym]\b"
(注意原始字符串前缀,这是\b
所必需的)(不使用单词边界将匹配您不希望匹配的字符串,例如
xx56yz
)相关问题 更多 >
编程相关推荐