我需要解析一个看起来像这样的配置文件(简化):
ipsec udp
我的目标是能够更改特定链接的参数,但是我无法让替换正常工作.我有一个正则表达式,可以隔离特定链接上的参数值,其中值包含在捕获组1中:
link_id = r'id="1"' parameter = 'mode' link_regex = '[\w\W]*[\w\W]*<%s>([\w\W]*)%s>[\w\W]*' \ % (link_id, parameter, parameter)
从而,
print re.search(final_regex, f_read).group(1)
打印ipsec
正则表达式中的示例似乎都假设人们想要在替换中使用捕获组,但我需要做的是替换捕获组本身(例如,将Link1模式从ipsec更改为udp).
我必须给你强制性的要求:"不要使用正则表达式来做到这一点."
看看使用BeautifulSoup这么做是多么的棒,例如:
>>> from BeautifulSoup import BeautifulStoneSoup >>> html = """ ...... ... """ >>> soup = BeautifulStoneSoup(html) >>> soup.find('link', id=1)... ... ...... ... ... ...ipsec ...... ... ...udp ...>>> soup.find('link', id=1).mode.contents[0].replaceWith('whatever') >>> soup.find('link', id=1) ipsec whatever
看看你的正则表达式,我无法确定这是否是你想要做的,但无论你想做什么,使用像BeautifulSoup这样的库比试图拼凑正则表达式要好得多.我强烈建议尽可能走这条路.