将正则表达式语法从Python转换为POSIX

时间:2017-03-07 18:37:03

标签: python regex sed transpiler

我经常在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)

用于this pull request

如果我可以使用标准GNU sed而不是每次我想要递归地批量更改文件时编写特殊脚本,那将非常有用。问题是Python uses an entirely different regex syntax than sed (POSIX)reasons well-known to any seasoned engineer

是否有将标准表达式从一种语法转换为另一种语法的标准方法?

我知道转换可能并不总是有效(某些功能如前瞻是非标准的),但80-20解决方案会非常好。

2 个答案:

答案 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匹配有一些支持。