【问题标题】:Find and replace symbols with regex python使用正则表达式 python 查找和替换符号
【发布时间】:2015-04-27 17:12:48
【问题描述】:

我有这样的样本:

sample = 'TEXT/xx_271802_1A'
p = re.compile("(/[a-z]{2})")
print p.match(sample)

xx 的位置可以是 [a-z] 中的任何一个,数量为 2:

TEXT/qq_271802_1A  TEXT/sg_271802_1A  TEXT/ut_271802_1A

我怎样才能找到这个 xx 和 f.e.将其替换为“WW”:

TEXT/WW_271802_1A  TEXT/WW_271802_1A  TEXT/WW_271802_1A

我的代码返回None

【问题讨论】:

    标签: python regex replace match


    【解决方案1】:
    sample = 'TEXT/xx_271802_1A'
    p = re.compile("(/[a-z]{2})")
    print p.search(sample).group()
    

    您的代码返回None,因为您正在使用与start 匹配的match。您需要searchfindall,因为您在字符串中的任何位置而不是在开始时找到。

    替换使用

    re.sub(r'(?<=/)[a-z]{2}','WW',sample)
    

    【讨论】:

      【解决方案2】:

      你可以试试下面的正则表达式:

      >>> sample = 'TEXT/xx_271802_1A'
      >>> import re
      >>> re.findall(r'([a-z])\1',sample)
      ['x']
      >>> re.sub(r'([a-z])\1','WW',sample)
      'TEXT/WW_271802_1A'
      >>> sample = 'TEXT/WW_271802_1A TEXT/WW_271802_1A TEXT/WW_271802_1A'
      >>> re.sub(r'([a-z])\1','WW',sample)
      'TEXT/WW_271802_1A TEXT/WW_271802_1A TEXT/WW_271802_1A'
      

      RegEx ([a-z])\1 搜索 1 个字母,如果立即重复则匹配它。

      【讨论】:

      • 这里是输入TEXT/qq_202_1A TEXT/sg_27_1 TEXT/ut_2718的样本
      • 猜猜你应该使用[a-z]{2} 如果字母不重复它可能会失败
      • @vks 噢!既然你已经回答了(没有演示),改变我的答案是不值得的! :) (只需投票支持你并离开 :))
      • @goquartzquartz 这将返回'TEXT/WW_202_1A TEXT/sg_27_1 TEXT/ut_2718'
      【解决方案3】:

      你只需要这样做:

      sample = re.sub(r'(?<=/)[a-z]{2}', 'WW', sample)
      

      在匹配之前不需要检查字符串。 re.sub 在找到模式时进行替换。

      (?&lt;=..) 是一个lookbehind 断言,意味着之前,它只是一个检查而不是匹配结果的一部分。所以/不会被替换。

      同理,如果要检查是否有下划线,可以在模式末尾添加前瞻(?=_)(后跟)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多