当前位置:  开发笔记 > 编程语言 > 正文

我可以使用re.sub(或regexobject.sub)替换子组中的文本吗?

如何解决《我可以使用re.sub(或regexobject.sub)替换子组中的文本吗?》经验,为你挑选了1个好方法。

我需要解析一个看起来像这样的配置文件(简化):




 
  ipsec
 


 
  udp
 


我的目标是能够更改特定链接的参数,但是我无法让替换正常工作.我有一个正则表达式,可以隔离特定链接上的参数值,其中值包含在捕获组1中:

link_id = r'id="1"'
parameter = 'mode'
link_regex = '[\w\W]*[\w\W]*<%s>([\w\W]*)[\w\W]*' \
% (link_id, parameter, parameter)

从而,

print re.search(final_regex, f_read).group(1)

打印ipsec

正则表达式中的示例似乎都假设人们想要在替换中使用捕获组,但我需要做的是替换捕获组本身(例如,将Link1模式从ipsec更改为udp).



1> Paolo Bergan..:

我必须给你强制性的要求:"不要使用正则表达式来做到这一点."

看看使用BeautifulSoup这么做是多么的棒,例如:

>>> from BeautifulSoup import BeautifulStoneSoup
>>> html = """
... 
... 
... 
...  
...   ipsec
...  
... 
... 
...  
...   udp
...  
... 
... 
... 
... """
>>> soup = BeautifulStoneSoup(html)
>>> soup.find('link', id=1)


ipsec


>>> soup.find('link', id=1).mode.contents[0].replaceWith('whatever')
>>> soup.find('link', id=1)


whatever


看看你的正则表达式,我无法确定这是否是你想要做的,但无论你想做什么,使用像BeautifulSoup这样的库比试图拼凑正则表达式要好得多.我强烈建议尽可能走这条路.

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有