我正在尝试从表格的一般字符串中提取包含数字的子字符串:
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个字符。
答案 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