2017-03-31 141 views
0

所以我试图解决一个问题,在我的代码中,一旦使用了re.split(regex_pattern,str),将额外的反斜杠添加到我的分割列表中的子字符串中。问题是这样的:当使用re.split时,为什么在列表中的子串中添加了一个额外的反斜杠''?

In [63]: str = r'/dir/hello\/hell/dir2/hello\end' 

In [64]: regex_pattern = '(hello)' 

In [65]: a = re.split(regex_pattern, str) 

In [66]: a 
Out[66]: ['/dir/', 'hello', '\\/hell/dir2/', 'hello', '\\end'] 

正如你所看到的,出[66]可见名单为具有两个子与“\\”,而不是两个用“\”。我知道这个问题与编译器如何解释反斜杠有关,但最终无法弄清楚为什么会发生这种情况。

我也试图使我str变量原始字符串,并增加额外的“\”我str变量(最多四个“\\\\”),其中一个存在,即

In [63]: str = r'/dir/hello\\/hell/dir2/hello\\end' 

这仍然给出相同的输出。

我在Ubuntu上使用Python 2.7。对不起,如果这是重复的,但我找不到答案适用于我的问题。

+1

基本上不用担心。它只是在您将列表打印到屏幕上时改变列表的显示方式,但实际的字符串没有任何额外的斜线。 –

+0

@ juanpa.arrivillaga谢谢 –

回答

2

这与re.split没有任何关系。 \通常定义一个转义序列。要使用文字\你需要加倍:

考虑您的原始字符串:

In [15]: s = r'/dir/hello\/hell/dir2/hello\end' 

In [16]: s 
Out[16]: '/dir/hello\\/hell/dir2/hello\\end' 

In [17]: len(s) 
Out[17]: 31 

额外\不与len计数。它们只能帮助指定\未定义任何其他转义序列;旁白\\这也是一个转义序列。

+0

谢谢。很好的指出它是如何不影响len()的! –