gpt4 book ai didi

Python re 模块 -\b 和 '-' 出现意外行为

转载 作者:行者123 更新时间:2023-12-01 03:11:54 25 4
gpt4 key购买 nike

我正在测试(使用 pythex )之间的正则表达式匹配

re.compile('''
[ ]?
(?P<element> [a-zA-Z])
[ ]+
(?P<x_axis> \b-?[0-9]+[.][0-9]+\b) # the first '\b' seems to be
# causing this issue
''', re.VERBOSE)

和字符串'C -1.97046278'。这会导致找不到匹配项。

然后,当我尝试删除 \b re 时,发现了上述字符串的匹配项。

语法是否错误?因为我一直在阅读 re 的文档,但没有发现任何提及这一点的内容。

愿意为我解释一下这种行为吗?

最佳答案

这里有两个主要问题:

  • 单词边界\b不明确,因为它们的含义取决于上下文。在这种情况下,如果数字前有 -,则仅当 前有单词字符时 \b-?[0-9] 才会匹配- 。您需要将 \b 放在 -? 之后。如果您删除此 \b,您的正则表达式将开始匹配任何上下文中的数字,并且我怀疑您仍然只想匹配整个单词。
  • 您需要使用原始字符串文字声明正则表达式,以便将\b视为单词边界而不是退格字符。

使用

import re
r=re.compile(r'''
[ ]?
(?P<element> [a-zA-Z])
[ ]+
(?P<x_axis> -?\b[0-9]+[.][0-9]+\b) # the first '\b' seems to be
# causing this issue
''', re.VERBOSE)
s = ' C -1.97046278'
print(r.findall(s))

查看online Python demo

关于Python re 模块 -\b 和 '-' 出现意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42820363/

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