条件组替换

时间:2015-03-13 10:58:36

标签: python regex

source= "<br />, systemd-system.conf(5), locale.conf(5),<br />       systemctl(1), journalctl(1), systemd-notify(1), daemon(7),sd-<br />       daemon(3), systemd.unit(5), systemd.special(5), pkg-config(1), kernel-<br />       command-line(7), bootup(7), systemd.directives(7)"
source= sub(compile(r"([\, ]+)(?:([A-Za-z\.\-]+))?(?:(<br /> {7}))?([A-Za-z\.\-]*)(\([0-9]\))", DOTALL), r"\1[\2]\3[\4\5]", source)

有了这个,我得到了无与伦比的群体错误 但是在regex101.com上,这给出了

<br />, [systemd-system.conf][(5)], [locale.conf][(5)],[]<br />       [systemctl(1)], [journalctl][(1)], [systemd-notify][(1)], [daemon][(7)],[sd-]<br />       [daemon(3)], [systemd.unit][(5)], [systemd.special][(5)], [pkg-config][(1)], [kernel-]<br />       [command-line(7)], [bootup][(7)], [systemd.directives][(7)]

结果并不是我所期待的结果 我需要

<br />, [systemd-system.conf(5)], [locale.conf(5)],<br />       [systemctl(1)], [journalctl(1)], [systemd-notify(1)], [daemon(7)],<br />       [sd-daemon(3)], [systemd.unit(5)], [systemd.special(5)], [pkg-config(1)], <br />       [kernel-command-line(7)], [bootup(7)], [systemd.directives(7)]

测试on regex101.com

2 个答案:

答案 0 :(得分:1)

我认为你让它变得复杂,试试这个:

r"([A-Za-z\.\-]+\([0-9]\))", r"[\1]" 

它会查找string-with.extras(5),并使用[ ]

简单地围绕它

如果你想删除一些与这个正则表达式不匹配的字符(如sd-中的daemon(7), sd-),你可以在结果上使用第二个:

r"([^[])[A-Za-z\.\-]+", r"\1"

将删除之前没有string-with.extras的任何[并将其删除。

答案 1 :(得分:1)

谢谢你们两位 我到了那里(版本5),但我的代码中出现了无法匹配的组错误。

通过添加|来解决就在前面的br标签(版本7)。