python - Python 后行断言中的撇号

标签 python regex

我正在尝试使用 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/

相关文章:

python - 我想使用 modelform 在 django 中更新的对象的主键在哪里?

python - 如何在 Pandas 中使用滚动不包含最后一个值?

python - 将 grid.lines 添加到 tkinter 不起作用

c++ - Perl正则表达式中 "~"标记有什么用?

python - Beautiful Soup - `findAll` 没有捕获 SVG (`ElementTree` 中的所有标签)

python - 逐行读取 80GB .gz 文件的内容而不解压缩

python - 正则表达式 - Python - 删除前导空格

javascript - 这个奇怪的 JavaScript 素数检查函数是如何工作的?

javascript - 删除脚本中的 HTML 标签

c - 正则表达式未按预期工作