【问题标题】:How to replace a string by given a relation of original and return string?如何通过给定原始字符串和返回字符串的关系来替换字符串?
【发布时间】:2013-10-22 06:00:31
【问题描述】:

我有一个文件,模式文本类似于(1A0IA:0.42722,1AYLA:0.47152)。我想用(1A0IA,1AYLA)替换它。

我知道我可以这样做:

text 是包含(1A0IA:0.42722,1AYLA:0.47152) 的字符串

expression 1 : reduced_text = re.sub(r':\d+\.\d+\,',r',',text) 
output : (1A0IA,1AYLA:0.47152)
expression 2 : reduced_text = re.sub(r':\d+\.\d+\)',r')',reduced_text) 
output : (1A0IA,1AYLA)

实际上我只想在(ID:float,ID:float) 中替换模式:float,,但是存在一些包含:float, 但不在这种字符串中的文本:(ID:float,ID:float)

是否存在可以执行以下操作的表达式?

(string1:0.42722,string2:0.47152) -> (string1,string2)

第一个 .{5}string 1 ;第二个.{5}string 2

reduced_text = re.sub(r'\(.{5}:\d+\.\d+\,.{5}:\d+\.\d+\)',r'\(.{5}\,.{5}\)',text)

【问题讨论】:

    标签: python regex python-3.x


    【解决方案1】:

    您正在寻找的是搜索组(例如,参见 Named Capturing Groups)。

    使用这些,您可以执行以下操作来获取您的 ID。

    re.findall('(?P<id1>.{5}):[\d\.]+,(?P<id2>.{5}):[\d\.]+', text)
    

    实际上没有必要命名捕获组,因此(.{5})...在这里就足够了。

    【讨论】:

      【解决方案2】:

      更简单的正则表达式:

      >>> import re
      >>> '(' + ','.join(re.findall(r'[,\(]([^:]*):', s)) + ')'
      '(1A0IA,1AYLA)'
      

      【讨论】:

        【解决方案3】:

        看看这个:

        import re
        s = "(1A0IA:0.42722,1AYLA:0.47152)"
        r = "([\d\w]{5}):[\d\.]+(,|\))"
        re.sub(r, r'\1\2', s)
        # '(1A0IA, 1AYLA)'
        

        【讨论】:

          猜你喜欢
          • 2018-12-01
          • 2016-02-03
          • 2014-08-06
          • 1970-01-01
          • 2020-02-08
          • 1970-01-01
          • 2016-02-17
          • 2016-03-01
          • 2018-11-13
          相关资源
          最近更新 更多