我正在尝试将几个正则表达式与其中的任意数量的空格连接起来,这些空格由变量定义
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
