逃脱字符串并将其拆分

时间:2012-08-31 22:04:48

标签: python regex split

我有以下代码:

import re

key = re.escape('#one #two #some #tests #are #done')
print(key)
key = key.split()
print(key)

以及以下输出:

\#one\ \#two\ \#some\ \#tests\ \#are\ \#done
['\\#one\\', '\\#two\\', '\\#some\\', '\\#tests\\', '\\#are\\', '\\#done']

为什么反斜杠是重复的?我只想在列表中输入一次,因为我想在正则表达式中使用此列表。

提前致谢!约翰

4 个答案:

答案 0 :(得分:1)

每个 只有一个反斜杠,但是当打印字符串的repr时,它们会被复制(转义) - 正如您在使用字符串时需要复制它们一样建立一个正则表达式。所以一切都很好。

例如:

>>> len("\\")
1
>>> len("\\n")
2
>>> len("\n")
1
>>> print "\\n"
\n
>>> print "\n"


>>>

答案 1 :(得分:1)

\ character是一个转义字符,它是一个改变后续字符[s]含义的字符。例如,“n”字符只是“n”。但如果你像“\ n”那样逃避它,它就会变成“换行”字符。因此,如果您需要使用\ literal,则需要使用...本身来转义它:\\

答案 2 :(得分:0)

反斜杠不重复。要实现这一点,请尝试:

for element in key:
    print element

你会看到这个输出:

\#one\
\#two\
\#some\
\#tests\
\#are\
\#done

当你打印完整个列表时,python使用表示字符串打印的表示不是原样,但它们打印为python表达式(注意引号“”,它们不在字符串中)

要实际编码包含反斜杠的字符串,您需要复制该反斜杠。就是这样。

答案 3 :(得分:0)

将列表转换为字符串(例如,打印它)时,它会对列表中包含的每个对象调用repr。这就是你在第二行输出中获得引号和额外反斜杠的原因。试试这个:

s = "\\a string with an escaped backslash"
print s       # prints: \a string with an escaped backslash
print repr(s) # prints: '\\a string with an escaped backslash'

repr调用在字符串周围放置引号,并显示反斜杠转义。