【问题标题】:Search a limited span of a string with re.search使用 re.search 搜索字符串的有限范围
【发布时间】:2017-10-13 17:08:34
【问题描述】:

我正在尝试从以下形式的一般字符串中提取包含数字的子字符串:

filename = 'AB-CDE-FG-HI-10.000 GHz#1 JK LM.dat'

我只需要提取“10.000”。

我尝试过使用

m = re.search(r"-(.*) GHz",filename)

但这会返回

In[67]: m.group(1)
Out[67]: 'CDE-FG-HI-10.000'

也就是说,它返回 first 连字符和“GHz”子字符串之间的所有内容。有没有办法限制执行搜索的范围?我知道“GHz”之前的数字只有 5 或 6 个字符的长度。

【问题讨论】:

    标签: python regex string


    【解决方案1】:

    您可以使用positive lookahead 来检查GHz。使用类似的东西

    (\d+\.\d+)(?= GHz)
    

    这将为 GHz 之前的数字创建一个捕获组,而排除GHz 的实际出现。

    注意:模式中GHz之前的空格是有意的,因为在数字之后GHz之前总会有一个空格。 p>

    【讨论】:

      【解决方案2】:

      您可以使用re.search(r"(\d+\.\d+) GHz", filename).group(1),因为\d+\.\d+ 将获取一组整数,后跟一个小数点,然后是另一组整数。

      【讨论】:

        【解决方案3】:

        您可以使用积极的前瞻:

        使用搜索方式:

        import re
        pattern=r'\d.+(?=GHz)'
        
        filename = 'AB-CDE-FG-HI-10.000 GHz#1 JK LM.dat'
        
        search=re.search(pattern,filename,re.M)
        
        print(search.group())
        

        使用 findall:

        import re
        pattern=r'\d.+(?=GHz)'
        
        filename = 'AB-CDE-FG-HI-10.000 GHz#1 JK LM.dat'
        
        search=re.findall(pattern,filename,re.M)
        
        print(" ".join(list(search)))
        

        输出:

        10.000 
        

        【讨论】:

          猜你喜欢
          • 2017-07-17
          • 1970-01-01
          • 1970-01-01
          • 2014-04-05
          • 2018-04-23
          • 1970-01-01
          • 2020-08-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多