Python 2.7.13中re.match匹配货币符号失败,求原因分析
问题原因与解决方案
哦,这个问题我太熟悉了——你踩了Python正则里re.match()的一个常见坑!
为什么会返回"No Match"?
re.match()的核心行为是只从字符串的起始位置开始匹配正则模式。你的测试字符串是'in €',开头是字母i,完全不符合[£$€]+这个要求匹配货币符号开头的模式,所以re.match()会返回None,程序自然走else分支输出"No Match"。
两种快速解决办法
方法1:用re.search()替代re.match()
re.search()会扫描整个字符串,只要找到任意位置匹配的模式就会返回结果,这正是你需要的场景:
import re # 别忘了导入re模块,你的代码里可能漏写了这一行 l_test_word = 'in €' print(l_test_word) if re.search(pattern=r'[£$€]+', string=l_test_word): print("Match") else: print("No Match")
方法2:修改正则模式适配re.match()
如果你一定要用re.match(),可以在模式前加上.*(匹配任意数量的任意字符),让它能覆盖符号前的内容:
import re l_test_word = 'in €' print(l_test_word) if re.match(pattern=r'.*[£$€]+', string=l_test_word): print("Match") else: print("No Match")
小提醒
记住这两个方法的区别:
re.match():验证字符串开头是否符合模式,适合做全格式校验(比如检查邮箱格式是否正确)re.search():在字符串任意位置查找匹配项,适合做内容存在性检查
内容的提问来源于stack exchange,提问作者Bharath Paturi
相关产品推荐
相关产品推荐

