python - Python Regex 中可能存在的错误......或者我错过了一些东西 - 无法匹配
问题描述
所以我有一个字符串s:
'MakeMoney EURUSD,M1 2021.08.06-2021.08.10'
和一段代码:
import re
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)
m.groupdict()
出现以下错误(忽略行号 - 其他不影响此的代码):
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
/tmp/ipykernel_32277/1686568363.py in <module>
50
51 m = pat1.search(s)
---> 52 m.groupdict()
53
AttributeError: 'NoneType' object has no attribute 'groupdict'
我追求的是:
{'robot': 'MakeMoney', 'asset': 'EURUSD', 'tf': 'M1', 'datefrom': '2021.08.06', 'dateto': '2021.08.10'}
我不知道为什么它不匹配......我搜索了 regex101 并尝试了 pythex - 有问题的 - 没有解决方案。我错过了什么?将 \A 和 \Z 添加到模式的开头和结尾没有帮助。
真正令人讨厌的是我在其他地方使用相同的方法没有问题,但模式和字符串结构不同......
解决方案
您原来的正则表达式只有 2 个错误,即:
","
"-"
在原始字符串中,没有引号:
MakeMoney EURUSD,M1 2021.08.06-2021.08.10
^ ^
除非你匹配
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)
...
它应该在之后工作。
旁注:如果您担心转义正则表达式中使用的特殊字符,请注意使用反斜杠\
,例如,如果您想匹配句点字符 then\.
而不是引号"."
或括号[.]
。
推荐阅读
- module - 根据 Nuxt 中的棱镜数据生成站点地图
- reactjs - 如何使用 React 完全禁用 TabPanel 组件(并使文本变灰)并默认为索引中的第二个选项卡
- opencv - 寻找箭头方向的鲁棒算法OpenCV
- python - 使用带有自定义功能的 Pandas Groupby
- java - 无法在 docker 容器中调试 Playframework 应用程序
- r - R - 从数据框中删除仅在数字列中包含零的行、基本 R 和管道友好方法?
- c - OpenCL - 通过蒙特卡罗模拟逼近 Pi - 错误值
- python - 为什么叶子中的样本数与 DecisionTreeClassifier 的父节点中的值数不匹配?
- python-3.x - 如何对质量、质心、惯性等进行 MultibodyPlant 计算的梯度?
- python - django 抽象模型真的那么有用吗?