我正在尝试使用 Python 正则表达式来获取字符分隔字符串的第一个标记。我不想将反斜杠分隔符视为真正的分隔符,因此我使用否定的后向断言。当分隔符是逗号时,它可以正常工作。
>>> 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并不表明 '
是特殊字符,所以我真的很想知道,为什么我的 '
会受到不同的对待?
(请不要评论:谁会想要一个以撇号分隔的文件。嗯...我愿意...)
最佳答案
print(repr("\'"),repr("\,"))
结果:
"'" '\\,'
如您所见,"\'"
中实际上没有 \\
。因此,当您将其更改为 "\\'"
时,模式会匹配生成:
Hello\' world!
"\'"
实际上是 escape sequence :
\' Single quote (')
原因很明显
>>> ord("\'") == ord("'")
True
是因为"\'"
相当于"'"
。这是有道理的 \'
是一个转义序列:
>>> 'i\'ll'
"i'll"
关于python - Python 后行断言中的撇号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16357429/