我正在尝试将几个正则表达式与它们之间的任意数量的空格连接起来,这些空格由我定义

SPACES = "\s*"


但是,如果我尝试

SPACES.join(['from','till'])


我懂了

'from\\s*till'


中间还有一个反斜杠字符。是否可以在不插入其他join的情况下使用\方法(以使结果为'from\s*till')?

最佳答案

您只是在观察字符串对象的__repr__及其__str__表示形式之间的差异。前者以转义形式(您可以/应该用来实例化同一字符串对象的文字形式)显示特殊字符,而后者则没有:

> SPACES = "\s*"
> pat = SPACES.join(['ab', 'cd'])
> pat
'ab\\s*cd'  # == repr(pat)
> print pat
ab\s*cd     # == str(pat)
# re.match(pat, 'ab   cd') matches as expected


正如在其他答案中提到的那样,'\s'不是有效的转义序列,因此反斜杠被视为文字反斜杠,也可以作为文字'\\'给出:

> '\s*' == '\\s*'
True
> r'\'  # not a valid raw string! -> error

10-08 14:35