首页 > 解决方案 > Python 正则表达式负向后看,包括行首

问题描述

考虑以下输入:

"aaa"|"bbb"|"123"|"!"\\"|"2010-01-04T00:00:01"

我正在尝试编写一个正则表达式,它将捕获并用波浪号替换双引号字符,如果...

在 PHP 中,我能够使下图所示的正则表达式正常工作... php_regex

由于对 python 正则表达式的限制,相同的正则表达式失败并出现以下错误:

re.error: look-behind requires fixed-width pattern

我的python代码如下:

import re
orig_line = r'"aaa"|"bbb"|"123"|"!"\\"|"2010-01-04T00:00:01"'
new_line = re.sub(pattern='(?<!\||^)\"(?!\||$)',repl='~',string=orig_line)

如何调整此正则表达式使其在 python 中工作?

SO上存在类似的问题,但我找不到任何解决线路开始/结束要求的问题。

标签: pythonpython-3.xregexnegative-lookbehind

解决方案


您可以使用

(?<=[^|])

(?<=[^|])匹配一个紧跟在任何字符前面的位置,但因此|它不能在字符串的开头匹配。

请参阅Python 演示

import re
orig_line = '"aaa"|"bbb"|"123"|"!"\\"|"2010-01-04T00:00:01"'
new_line = re.sub(r'(?<=[^|])"(?=[^|])', '~', orig_line)
print(new_line) # => "aaa"|"bbb"|"123"|"!~\"|"2010-01-04T00:00:01"

推荐阅读