问题描述
考虑以下输入:
"aaa"|"bbb"|"123"|"!"\\"|"2010-01-04T00:00:01"
我正在尝试编写一个正则表达式,如果...
- 它前面或后面都没有分隔符
|
AND - 它不在行首 AND
- 它不在行尾
在 PHP 中,我能够使下图所示的正则表达式正常工作...
由于 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 上存在类似的问题,但我找不到任何解决行首/行尾要求的问题。
解决方法
你可以使用
(?<=[^|])
(?<=[^|])
匹配紧跟在除 |
之外的任何字符的位置,因此它不能匹配字符串的开头。
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"