Python正则表达式负回顾,包括行首

问题描述

考虑以下输入:

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

我正在尝试编写一个正则表达式,如果...

  • 它前面或后面都没有分隔符 | AND
  • 它不在行首 AND
  • 它不在行尾

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 上存在类似的问题,但我找不到任何解决行首/行尾要求的问题。

解决方法

你可以使用

(?<=[^|])

(?<=[^|]) 匹配紧跟在除 | 之外的任何字符的位置,因此它不能匹配字符串的开头。

Python demo

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"