Python正则表达式中可能存在的错误。。。或者也许我错过了一些失败的比赛

2024-09-30 10:41:38 发布

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

所以我有一个字符串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-buggy,但没有找到解决方案。我错过了什么?将\A和\Z添加到模式的开头和结尾并没有帮助

真正令人讨厌的是,我在其他地方使用了相同的方法,但没有问题,只是使用了不同的模式和字符串结构


Tags: 字符串代码researchtfrobotassetattributeerror
1条回答
网友
1楼 · 发布于 2024-09-30 10:41:38

您原来的正则表达式只有两个错误,即:

  1. ","
  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)
...

它应该在以后工作

旁注:如果您担心转义正则表达式中使用的特殊字符,请注意使用反斜杠\,例如,如果您想匹配句点字符,则使用\.而不是引号"."或括号[.]

相关问题 更多 >

    热门问题