gpt4 book ai didi

Python/Regex/Match/Search 混淆

转载 作者:太空宇宙 更新时间:2023-11-03 13:51:20 25 4
gpt4 key购买 nike

我遇到了这个有趣的案例。我不确定 | 的优先级运算符所以我最初使用非捕获组来分隔我的管道。但是,这导致匹配项没有结果,删除捕获组也没有结果。但是,在它们周围指定一个捕获组是可行的。这对我来说很奇怪。我不太明白这是怎么回事。有什么想法吗?

此外,正如我所料,搜索在所有情况下都有效...

re.match(r'^Details: WARNING|CRITICAL|ERROR', 'Details: CRITICAL asdfasdf')
None
re.match(r'^Details: (?:WARNING)|(?:CRITICAL)|(?:ERROR)', 'Details: CRITICAL asdfasdf
None
re.match(r'^Details: (?:WARNING|CRITICAL|ERROR)', 'Details: CRITICAL asdfasdf'
<_sre.SRE_Match at 0x1b27d98>
re.search(r'^Details: WARNING|CRITICAL|ERROR', 'Details: CRITICAL asdfasdf')
<_sre.SRE_Match at 0x1b27ed0>
re.search(r'^Details: (?:WARNING)|(?:CRITICAL)|(?:ERROR)', 'Details: CRITICAL asdfasdf')
<_sre.SRE_Match at 0x1b27e00>
re.search(r'^Details: (?:WARNING|CRITICAL|ERROR)', 'Details: CRITICAL asdfasdf')
<_sre.SRE_Match at 0x1b27e00>

最佳答案

您的表达式 ^Details: WARNING|CRITICAL|ERROR 被解释为这三个正则表达式的交替:

  • ^详情:警告
  • 严重
  • 错误

由于re.match(不像re.search)要求匹配从字符串的开头开始,所以会匹配失败详情:CRITICAL 详细信息:错误

如果您不需要捕获组,最好的解决方法是:

r'^Details: (?:WARNING|CRITICAL|ERROR)'

如果以下任何正则表达式匹配(按预期),则此表达式匹配:

  • ^详情:警告
  • ^细节:严重
  • ^详细信息:错误

虽然 re.search 在这里工作得很好,但是将 re.match 与这个正则表达式一起使用会更有意义,因为您只在字符串。

关于Python/Regex/Match/Search 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8143682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com