python - Python 正则表达式负向后看,包括行首
问题描述
考虑以下输入:
"aaa"|"bbb"|"123"|"!"\\"|"2010-01-04T00:00:01"
我正在尝试编写一个正则表达式,它将捕获并用波浪号替换双引号字符,如果...
- 它前面或后面都没有分隔符
|
AND - 它不在行首并且
- 它不在行尾
由于对 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 演示:
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"
推荐阅读
- ios - 在 ios 的 swift5 中找不到“FirebaseCore/FirebaseCore.h”文件
- javascript - 我正在尝试使用 npm 版本 v8.10.0 运行 npm install bcrypt 但我一直收到以下问题。使用 Mac Mojave 不确定是否有帮助
- r - HSD.test 行名称错误。如何检查行名?
- java - Angular POST RESTful API 到 Ejb 导致 404 not found 错误
- javascript - TypeError:无法读取 null 的属性“名称”与 redux 反应
- javascript - Https可调用云函数不返回值
- kotlin - 具有自己的协程范围的单元测试类
- reactjs - 我如何只在输入中搜索时显示数据?
- flutter - Flutter TextField 错误:底部溢出 99472 像素的 RenderFlex
- c - 格式说明符“%02x”和“%3o”在这段代码中有什么作用?