为什么在单词边界正则表达式中需要双反斜杠,而其他表达式只需要一个反斜杠?

3

例子:

def searchResult(expr, inputStr):
    if (re.search(expr, inputStr)):
        return True
    return False

print(searchResult("\s", "the quick brown fox")) # True
print(searchResult("\bfox", "the quick brown fox")) # False
print(searchResult("\\bfox", "the quick brown fox")) # True

我需要双斜杠"\\b"来表示单词边界,但只有单斜杠"\s"可以用于空格字符。为什么单词边界需要双斜杠?


1个回答

12

\b拥有特殊含义:它是退格字符。 \s 和许多其他的 \<something> 序列没有特殊含义,所以\被解释为斜杠字面意思。

>>> '\b'
'\x08'
>>> print('123\b456')
12456
>>> '\s'
'\\s'
>>> print('\s')
\s
>>> print('\b')

>>> # nothing visible printed above

为了简化操作,编写正则表达式时通常应使用原始字符串字面量。这通常可以防止\在Python字符串中被解释为转义字符,从而使其在正则表达式中正常工作。例如:

r"\d{3}-\d{3}-\d{4}"
>>> r'\b'
'\\b'
>>> print(r'\b')
\b

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接