使用re.search搜索有限范围的字符串

时间:2017-10-13 17:08:34

标签: python regex string

我正在尝试从表格的一般字符串中提取包含数字的子字符串:

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个字符。

3 个答案:

答案 0 :(得分:2)

您可以使用positive lookahead来检查GHz。使用像

这样的东西
(\d+\.\d+)(?= GHz)

这将使的捕获组仅 GHz之前的数字,同时排除GHz的实际出现次数。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

你可以使用积极的前瞻:

使用搜索方法:

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