我经常在Python中编写相当复杂的正则表达式。例如:
content = ...
regex = '(.*%.*)([^A-Za-z_])(PAGES)([^A-Za-z_])(.*%.*)'
repl = '\g<1>\g<2>pages\g<4>\g<5>'
re.sub(regex, repl, content)
如果我可以使用标准GNU sed
而不是每次我想要递归地批量更改文件时编写特殊脚本,那将非常有用。问题是Python uses an entirely different regex syntax than sed (POSIX),reasons well-known to any seasoned engineer。
是否有将标准表达式从一种语法转换为另一种语法的标准方法?
我知道转换可能并不总是有效(某些功能如前瞻是非标准的),但80-20解决方案会非常好。
答案 0 :(得分:1)
您可以使用 sh 包。
https://pypi.python.org/pypi/sh
示例代码: 让我们说你有test.txt与下面的字符串约翰是一个好孩子
from sh import sed
sed('s/John/Nick/g','test.txt')
执行后,该文件将 Nick是一个好孩子
答案 1 :(得分:1)
可能不是一个完整的解决方案,但regex
包(不是re
包)文档提到该包对POSIX类和POSIX匹配有一些支持。