我正在尝试学习如何做python正则表达式。我希望以下程序在输入字符串中搜索字符串'N \ S \ A'。我读(here)如果你想处理'\'字符,你必须创建字符串原始字符串。但我把r放在匹配字符串的前面,它仍然无法正常工作。 (无论是“NSA”还是“N \ S \ A”......)
import re
inword = input('Enter in text that may or may not be suspicious: ')
print("Inword is:", inword)
mword = re.search(r'N\S\A',inword)
if mword :
print('Matched',mword .group())
#deployDrones();
else:
print('Not matched')
为什么这不起作用?我该怎么做才能解决它?
答案 0 :(得分:5)
您不需要正则表达式。
使用in
运算符:
>>> inword = 'Hello N\S\A!'
>>> r'N\S\A' in inword
True
如果你真的需要正则表达式,你需要转义\
本身,因为\S
匹配非空格字符(\A
也有特殊含义):
>>> inword = 'Hello N\S\A!'
>>> re.search(r'N\S\A', inword)
>>> re.search(r'N\\S\\A', inword)
<_sre.SRE_Match object at 0x7f804ea33370>
\ S
如果未指定UNICODE标志,则匹配任何非空格 字符;这相当于集合[^ \ t \ n \ r \ n \ f \ v] LOCALE flag对非空白匹配没有额外影响。如果设置了UNICODE, 然后在Unicode字符中没有标记为空格的任何字符 属性数据库匹配。
\ A
仅在字符串的开头匹配。
答案 1 :(得分:2)
要在正则表达式中包含反斜杠作为字符而没有任何特殊含义,您必须使用另一个反斜杠转义它。
在您的情况下,您应该使用:
mword = re.search(r'N\\S\\A',inword)
原始字符串使python将反斜杠视为普通字符,但它在正则表达式中仍具有特殊含义。