我正在尝试使用Python正则表达式来获取字符分隔字符串的第一个标记。我不想将反斜杠分隔符视为真正的分隔符,所以我使用负面的lookbehind断言。当分隔符是逗号时,它可以正常工作。
>>> import re
>>> re.match("(.*?)(?<!\\\\),.*", "Hello\, world!,This is a comma separated string,Third value").groups(1)[0]
'Hello\\, world!'
而用逗号替换逗号的完全相同的代码根本不起作用。
>>> import re
>>> re.match("(.*?)(?<!\\\\)'.*", "Hello\' world!'This is an apostrophe separated string'Third value").groups(1)[0]
'Hello'
>>>
我正在使用python 2.7.2,但我对Python 3有相同的行为(在Ideone上测试)。 Python re documentation并不表示'
是一个特殊字符,所以我真的很想知道,为什么我的'
处理方式不同?
(请,没有评论:谁会想要一个撇号分隔的文件。嗯......我做......)
答案 0 :(得分:4)
print(repr("\'"),repr("\,"))
结果:
"'" '\\,'
正如您所看到的,"\'"
实际中没有\\
。因此,当您将其更改为"\\'"
时,模式匹配生成:
Hello\' world!
"\'"
实际上是escape sequence:
\'单引号(')
显然,原因
>>> ord("\'") == ord("'")
True
是因为"\'"
等同于"'"
。有意义\'
是一个转义序列:
>>> 'i\'ll'
"i'll"