Python正则匹配字符串失败返回None触发AttributeError问题排查
问题原因及解决方案
核心错误点
- 正则规则中错误添加了多余的双引号匹配逻辑:你要匹配的资产与时间周期间的分隔符只有
,,但正则里写了",",要求匹配被双引号包裹的逗号;两个日期间的分隔符只有-,但正则里写了"-",要求匹配被双引号包裹的减号,这和实际字符串内容完全不符,导致匹配失败返回None,调用groupdict自然报错。 - 资产字段的匹配规则冗余:
(?P<asset>[^","]+)本意是匹配到逗号位置即可,直接写(?P<asset>[^,]+)就足够,多余的双引号排除规则无实际意义。
你在正则测试平台验证时大概率误将字符串字面量首尾的单/双引号当成了字符串实际内容的一部分,才会出现平台测试通过、实际代码运行失败的情况。
修正后代码
import re s = 'MakeMoney EURUSD,M1 2021.08.06-2021.08.10' pat1 = re.compile(r''' (?P<robot>[^\s]+) \s (?P<asset>[^,]+) , (?P<tf>[^\s]+) \s (?P<datefrom>[0-9]{4}[.][0-9]{2}[.][0-9]{2}) - (?P<dateto>[0-9]{4}[.][0-9]{2}[.][0-9]{2}) ''', re.VERBOSE) m = pat1.search(s) print(m.groupdict())
运行输出
{'robot': 'MakeMoney', 'asset': 'EURUSD', 'tf': 'M1', 'datefrom': '2021.08.06', 'dateto': '2021.08.10'}
内容的提问来源于stack exchange,提问作者Andy Thompson
相关产品推荐
相关产品推荐

