我正在测试(使用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 的文档,但没有发现任何提及。
要为我解释这种行为吗?
答案 0 :(得分:1)
\b
匹配单词字符和非单词字符。空格和-
都是非单词字符,因此\b
之间不匹配。
单词字符是字母,数字和下划线。非单词字符是其他所有字符。
此外,您需要使用由r''' ... '''
分隔的原始字符串,以便将\b
之类的转义序列传递给re
模块,而不是作为字符串转义处理。
答案 1 :(得分:1)
这里有两个主要问题:
\b
不明确,因为它们的含义取决于上下文。在这种情况下,如果数字前面有-
,\b-?[0-9]
只会在-
之前有字词char时匹配。您需要在 \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))
答案 2 :(得分:0)
你当然需要:
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)
请注意r
来电中的compile()
。