2017-03-07 65 views
0

我經常在Python中編寫相當複雜的正則表達式。例如:將正則表達式語法從Python轉換爲POSIX

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

有沒有標準的方法來將正則表達式從一種語法轉換爲另一種語法?

我知道轉換可能並不總是有效(一些功能比如lookahead是非標準的),但80-20的解決方案會非常好。

+1

你問如何將Python're'模式轉換爲POSIX?即便如此,這個問題聽起來太寬泛了。 –

+0

@WiktorStribiżew,希望反之亦然 –

+1

相關:[Regex Rosetta Stone](https://docs.google.com/spreadsheets/d/174ZtgXlzb-XvEVotDWLTuC4kcvwJj6lyrQw5JqZKfis/edit#gid=0) – Udi

回答

1

您可以使用sh包。

https://pypi.python.org/pypi/sh

示例代碼: 可以說,你有下列字符串的test.txt 約翰是個好孩子

from sh import sed 
sed('s/John/Nick/g','test.txt') 

執行後的文件將有尼克是一個好男孩

+0

看到我上面的評論 - 關於什麼反過來,Python正則表達式**到** POSIX? –

1

可能不是一個完整的解決方案,但是regex包(而不是re包)文檔提到該包有一些支持POSIX類和POSIX匹配。

+0

謝謝。另一種方式呢 - 將*轉換爲* POSIX? –

相關問題