2012-04-27 82 views
3

我很新的正则表达式,并试图获取“\”字符使用python如何逃脱“” Python中字符

通常我可以逃脱“\”像这样

print ("\\"); 
print ("i am \\nit"); 

输出

\ 
i am \nit 

但是当我使用至REGx一样我认为它没有工作

​​

,并返回我输出

['\\'] 

有人可以解释为什么

+14

在python中使用分号并不好。 – jamylak 2012-04-27 11:05:48

+0

同样的问题,问题和答案为[http://stackoverflow.com/questions/647769/why-cant-pythons-raw-string-literals-end-with-a-single-backslash][1] [1]:http://stackoverflow.com/questions/647769/why-cant-pythons-raw-string-literals-end-with-a-single-backslash – Boud 2012-04-27 11:44:14

回答

12

编辑:问题是实际上如何print作品与列表&字符串。它打印字符串的表示形式,而不是字符串本身,仅包含反斜杠的字符串表示形式为'\\'。所以findall实际上正确地找到了单个反斜杠,但是print未按照预期打印。尝试:

>>> print(re.findall(r'\\',"i am \\nit")[0]) 
\ 

(以下是我原来的答复,可以忽略不计(这是完全不相关的),我最初误解的问题,但它似乎已被upvoted一点,所以我。 )

字符串的r前缀表示字符串处于“原始”模式,即\不被视为特殊字符(它与“regex”没有任何关系。 )。

然而,r'\'不起作用,因为你不能结束原始字符串使用反斜杠,it's stated in the docs

Even in a raw string, string quotes can be escaped with a backslash, but the backslash remains in the string; for example, r"\"" is a valid string literal consisting of two characters: a backslash and a double quote; r"\" is not a valid string literal (even a raw string cannot end in an odd number of backslashes). Specifically, a raw string cannot end in a single backslash (since the backslash would escape the following quote character).

但实际上,你可以使用一个非原始字符串来获得一个反斜杠: "\\"

+0

在Python 2.7中,'re.compilte(“\\”)'给出错误'错误:伪造转义(行结束)'。 – 2012-04-27 11:13:36

+0

要通过正则表达式匹配实际的反斜线,需要在正则表达式中使用两个反斜杠,然后再使用两个反斜杠来避免这些反斜杠:'re.compile(“\\\\”)'产生匹配单个反斜杠的正则表达式。 – 2012-04-27 11:13:45

+0

@LimboPeng,我读错了问题,所以我原来的答案是不正确的。 – huon 2012-04-27 11:17:25

-1

没有必要逃避原始字符串反斜线,除非反斜杠立即之前关闭的引号。

+3

-1原始字符串不能以未转义的\ in结尾蟒蛇。 – Fenikso 2012-04-27 11:12:19

0

请注意,您在这里使用两种不同的字符串文字 - 常规字符串"a string"和原始字符串r"a raw string"。常规字符串文字观察反斜杠转义,所以为了在字符串中实际添加反斜杠,您还需要将其转义。原始字符串文字像任何其他字符一样对待反斜杠,所以您更加限制可以在字符串中放入哪些字符(不需要转义代码的特殊字符),但更容易输入正则表达式之类的东西,因为您没有如果您需要在字符串中添加反斜杠以使其具有意义,而不仅仅是在创建字符串时需要加倍反斜杠。

1

can someone please explain why

因为re.findall找到了一个匹配项,匹配文本由反斜杠组成。它给了你一个包含一个元素的列表,它是一个字符串,它有一个字符,它是一个反斜杠。这是写

['\\']因为'\\'是怎么写的“同一个反斜杠一个字符串” - 就像你所要做的,当你写的示例代码print "\\"