如何解决原始字符串不将反斜杠视为文字字符吗?
在python中使用re
模块时,我对反斜杠有疑问。考虑代码:
import re
message = 'My phone number is 345-298-2372'
num_reg = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
match = num_reg.search(message)
print(match.group())
在上面的代码中,原始字符串被传递到re.compile
方法中,但是反斜杠仍未被视为文字字符,因为/d
仍然是占位符一个数字。为什么是原始字符串呢?
解决方法
re和原始字符串的documentation很好地回答了这个问题。
因此,在您的示例中,传递给re.compile()的参数最终包含原始\
。使用re时这是理想的,因为它具有自己的转义序列,该序列可能与python的转义序列冲突,也可能不冲突。通常,在使用正则表达式时使用r'foo'
更为方便,这样您就不必对正则表达式的特殊字符进行两次转义。
在没有原始字符串的情况下,要使转义符重新用于处理,您需要使用:
import re
message = 'My phone number is 345-298-2372'
num_reg = re.compile('\\d\\d\\d-\\d\\d\\d-\\d\\d\\d\\d')
match = num_reg.search(message)
print(match.group())
您可能会考虑查看正则表达式量词/重复语法,因为它通常使可读性更高:
import re
message = 'My phone number is 345-298-2372'
num_reg = re.compile(r'\d{3}-\d{3}-\d{4}')
match = num_reg.search(message)
print(match.group())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。