我希望在文本中匹配空格字符或字符串结尾。
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')
模式不对。
如何使用python?
答案 0 :(得分:14)
\s*$
不正确:这匹配“零个或多个空格后跟字符串的结尾”,而不是“一个或多个空格或字符串“。
对于这种情况,我会用
(?:\s+|$)
(在原始字符串中,正如其他人提到的那样)。
(?:)
部分只是将子表达式分开,以便|运算符匹配正确的片段,而不是正确的片段。
答案 1 :(得分:0)
试试这个:
assert re.findall('@%s\\s*$' % uname, '@'+uname)
如果您不使用原始字符串,则必须转义\
字符。
这有点令人困惑,但源于\
是python解释器和re
模块的元字符这一事实。
答案 2 :(得分:0)
使用raw strings。
assert re.findall(r'@%s\s*$' % uname, '@'+uname)
否则,在常规字符串中使用\
作为特殊字符会与在正则表达式中用作特殊字符相冲突。
但这种说法不可能失败。当然,由“@”加上变量uname
的内容组成的字符串将匹配正则表达式“@”加uname
加上可选(总是空的)空格,然后字符串的结尾。这是一个重言式。我怀疑你正试图检查别的东西?