re.search()的原始字符串?

时间:2013-08-27 08:55:06

标签: python regex

我正在尝试学习如何做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')

为什么这不起作用?我该怎么做才能解决它?

2 个答案:

答案 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

     

仅在字符串的开头匹配。

来自Regular expression syntax

答案 1 :(得分:2)

要在正则表达式中包含反斜杠作为字符而没有任何特殊含义,您必须使用另一个反斜杠转义它。

在您的情况下,您应该使用:

mword  = re.search(r'N\\S\\A',inword)

原始字符串使python将反斜杠视为普通字符,但它在正则表达式中仍具有特殊含义。