9

我想匹配文本中的空格字符或字符串结尾。

import re


uname='abc'
assert re.findall('@%s\s*$' % uname, '@'+uname)
assert re.findall('@%s\s*$' % uname, '@'+uname+'  '+'aa')
assert not re.findall('@%s\s*$' % uname, '@'+uname+'aa')

模式不对。
如何使用蟒蛇?

4

3 回答 3

23

\s*$不正确:这匹配“零个或多个空格后跟字符串的结尾”,而不是“一个或多个空格字符串的结尾”。

对于这种情况,我会使用 (?:\s+|$)(在原始字符串中,正如其他人提到的那样)。该(?:)部分只是关于分隔该子表达式,以便 | 运算符匹配正确的片段并且不超过正确的片段。

于 2013-05-13T10:40:25.773 回答
0

尝试这个:

assert re.findall('@%s\\s*$' % uname, '@'+uname)

\如果不使用原始字符串,则必须转义字符。

这有点令人困惑,但源于它\是 python 解释器和re模块的元字符这一事实。

于 2013-05-13T10:24:00.833 回答
0

使用原始字符串

assert re.findall(r'@%s\s*$' % uname, '@'+uname)

否则,\在常规字符串中用作特殊字符与在正则表达式中用作特殊字符相冲突。

但这种说法是不可能失败的。当然,一个只包含“@”加上变量内容的字符串uname将匹配正则表达式“@”uname加上可选的(总是空的)空格,然后是字符串的结尾。这是一个重言式。我怀疑您正在尝试检查其他内容?

于 2013-05-13T10:28:41.230 回答