Python正则表达式负回溯,包括行的开头

Python正则表达式负回溯,包括行的开头,python,python-3.x,regex,negative-lookbehind,Python,Python 3.x,Regex,Negative Lookbehind,考虑以下输入: "aaa"|"bbb"|"123"|"!"\\"|"2010-01-04T00:00:01" 我正在尝试编写一个正则表达式,如果 它前面或后面没有分隔符|和 它不在线路的起点,并且 它不在队伍的尽头 在PHP中,我可以让下面的正则表达式工作。。。 由于python正则表达式上的约束,同一正则表达式失败,并出现以下错误: re.error: look-behind

考虑以下输入:

"aaa"|"bbb"|"123"|"!"\\"|"2010-01-04T00:00:01"
我正在尝试编写一个正则表达式,如果

  • 它前面或后面没有分隔符
    |
  • 它不在线路的起点,并且
  • 它不在队伍的尽头
在PHP中,我可以让下面的正则表达式工作。。。

由于python正则表达式上的约束,同一正则表达式失败,并出现以下错误:

re.error: look-behind requires fixed-width pattern
我的python代码如下所示:

重新导入
orig|u line=r'“aaa”|“bbb”|“123”|“!“\\”|“2010-01-04T00:00:01”
new_line=re.sub(pattern='(?您可以使用


(?我将按照以下方式来处理它:因为您感兴趣的是“这不是一开始,我们可以将其表示为在前面有一个非换行符,即使用正向查找,即:

import re
orig_line = r'"aaa"|"bbb"|"123"|"!"\\"|"2010-01-04T00:00:01"'
new_line = re.sub(pattern='(?<=.)(?<!\|)\"(?!\||$)',repl='~',string=orig_line)
print(new_line)
如果您不局限于python标准库,我建议尝试使用支持可变长度lookbehind的库,例如:

import regex as re
text = "a1aa2aaa3aaaa4"
print(re.findall('(?<=a{3,})[0-9]', text))
"aaa"|"bbb"|"123"|"!~\\"|"2010-01-04T00:00:01"
import regex as re
text = "a1aa2aaa3aaaa4"
print(re.findall('(?<=a{3,})[0-9]', text))
['3', '4']