我很新的正则表达式,并试图获取“\”字符使用python如何逃脱“” Python中字符
通常我可以逃脱“\”像这样
print ("\\");
print ("i am \\nit");
输出
\
i am \nit
但是当我使用至REGx一样我认为它没有工作
,并返回我输出
['\\']
有人可以解释为什么
我很新的正则表达式,并试图获取“\”字符使用python如何逃脱“” Python中字符
通常我可以逃脱“\”像这样
print ("\\");
print ("i am \\nit");
输出
\
i am \nit
但是当我使用至REGx一样我认为它没有工作
,并返回我输出
['\\']
有人可以解释为什么
编辑:问题是实际上如何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).
但实际上,你可以使用一个非原始字符串来获得一个反斜杠: "\\"
。
在Python 2.7中,'re.compilte(“\\”)'给出错误'错误:伪造转义(行结束)'。 – 2012-04-27 11:13:36
要通过正则表达式匹配实际的反斜线,需要在正则表达式中使用两个反斜杠,然后再使用两个反斜杠来避免这些反斜杠:'re.compile(“\\\\”)'产生匹配单个反斜杠的正则表达式。 – 2012-04-27 11:13:45
@LimboPeng,我读错了问题,所以我原来的答案是不正确的。 – huon 2012-04-27 11:17:25
请注意,您在这里使用两种不同的字符串文字 - 常规字符串"a string"
和原始字符串r"a raw string"
。常规字符串文字观察反斜杠转义,所以为了在字符串中实际添加反斜杠,您还需要将其转义。原始字符串文字像任何其他字符一样对待反斜杠,所以您更加限制可以在字符串中放入哪些字符(不需要转义代码的特殊字符),但更容易输入正则表达式之类的东西,因为您没有如果您需要在字符串中添加反斜杠以使其具有意义,而不仅仅是在创建字符串时需要加倍反斜杠。
can someone please explain why
因为re.findall
找到了一个匹配项,匹配文本由反斜杠组成。它给了你一个包含一个元素的列表,它是一个字符串,它有一个字符,它是一个反斜杠。这是写
['\\']
因为'\\'
是怎么写的“同一个反斜杠一个字符串” - 就像你所要做的,当你写的示例代码print "\\"
。
在python中使用分号并不好。 – jamylak 2012-04-27 11:05:48
同样的问题,问题和答案为[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