【问题标题】:python search replace using wildcardspython搜索使用通配符替换
【发布时间】:2011-01-06 14:25:18
【问题描述】:

有点困惑..但尝试使用通配符进行搜索/替换

如果我有类似的东西:

 <blah.... ssf  ff>
 <bl.... ssf     dfggg   ff>
 <b.... ssf      ghhjj fhf>

我想用say替换所有上述字符串,

 <hh  >t

关于如何实现这一点的任何想法/cmets?

谢谢

更新(感谢 cmets!)

我错过了什么......

我的初始示例文本是:

Soo Choi</span>LONGEDITBOX">Apryl Berney 
Soo Choi</span>LONGEDITBOX">Joel Franks 
Joel Franks</span>GEDITBOX">Alexander Yamato 

我正在努力获得

Soo Choi foo Apryl Berney 
Soo Choi foo Joel Franks 
Joel Franks foo Alexander Yamato 

我已经尝试过

name=re.sub("</s[^>]*\">"," foo ",name) 

但我错过了一些东西......

想法...谢谢

【问题讨论】:

  • hmmm...缺少一些东西...我的初始示例文本是:Soo ChoiLONGEDITBOX">Apryl Berney Soo ChoiLONGEDITBOX">Joel Franks Joel FranksGEDITBOX">Alexander Yamato 和我正在尝试获取 Soo Choi foo Apryl Berney Soo Choi foo Joel Franks Joel Franks foo Alexander Yamato 我尝试了 name=re.sub("[^>]*\ ">"," foo ",name) 但我遗漏了一些东西......想法......

标签: python regex search replace wildcard


【解决方案1】:

这样用正则表达式怎么样

import re

YOURTEXT=re.sub("<b[^>]*>","<hh >t",YOURTEXT)

【讨论】:

    【解决方案2】:

    请参阅相当实用的 Python Regular Expression 手册 here,或查看Regular Expression HOWTO 部分5.2 搜索和替换,了解更实用的方法。

    【讨论】:

    • Regex 是这里的简单方法。 s/&lt;[^&gt;]*&gt;/&lt;hh &gt;t/g
    【解决方案3】:

    不必使用正则表达式

    for line in open("file"):
        if "<" in line and ">" in line:
            s=line.rstrip().split(">")
            for n,i in enumerate(s):
                if "<" in i:
                    ind=i.find("<")
                    s[n]=i[:ind] +"<hh "
            print '>t'.join(s)
    

    输出

    $ cat file
    blah  <blah.... ssf  ff> blah
    blah <bl.... ssf     dfggg   ff>  blah <bl.... ssf     dfggg   ff>
    blah <b.... ssf      ghhjj fhf>
    
    $ ./python.py
    blah  <hh >t blah
    blah <hh >t  blah <hh >t
    blah <hh >t
    

    【讨论】:

    • 这是一个很好的快速而肮脏的解决方案,但也因此不是很可扩展;它也不会在&lt; 之后检查b - 尽管尚不清楚这是否是 OP 的要求。使用正则表达式,他将拥有一个更加通用的工具。
    • 是的,我同意。没有来自OP的太多其他信息。此外,如果 OP 真的在解析复杂的 HTML(或 XML?),甚至建议不要使用正则表达式 :)
    【解决方案4】:

    听起来像是“re”模块的工作,这里有一个小示例函数,尽管您可以只使用一个 re.sub() 行。

    使用“re”模块,一个简单的 re.sub 就可以解决问题:

    import re
    
    def subit(msg):
        # Use the below if the string is multiline
        # subbed = re.compile("(<.*?>)" re.DOTALL).sub("(<hh  >t", msg)
        subbed = re.sub("(<.*?>)", "<hh  >t", msg)
        return subbed
    
    # Your messages bundled into a list
    msgs = ["blah  <blah.... ssf  ff> blah",
            "blah <bl.... ssf     dfggg   ff>  blah <bl.... ssf     dfggg   ff>",
            "blah <b.... ssf      ghhjj fhf>"]
    
    # Iterate the messages and print the substitution results
    for msg in msgs:
        print subit(msg)
    

    我建议查看“re”模块的文档,它有详细的文档,可能会帮助您实现更准确的文本操作/替换。

    【讨论】:

    • 你对所有事情都使用函数吗?
    猜你喜欢
    • 2020-06-24
    • 2011-08-16
    • 2012-09-29
    • 2013-10-17
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    相关资源
    最近更新 更多