2

我正在尝试学习如何做 python 正则表达式。我希望以下程序在输入字符串中搜索字符串“N\S\A”。我读到(here)如果你想处理'\'字符,你必须制作字符串原始字符串。但是我将 r 放在匹配字符串的前面,它仍然无法正常工作。(无论 inword 是 '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')

为什么这不起作用?我能做些什么来修复它?

4

2 回答 2

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\f\v] LOCALE 标志对非空白匹配没有额外影响。如果设置了 UNICODE,则匹配 Unicode 字符属性数据库中未标记为空格的任何字符。

\一个

仅匹配字符串的开头。

正则表达式语法

于 2013-08-27T08:56:31.790 回答
2

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

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

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

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

于 2013-08-27T09:01:00.977 回答