Python正则表达式如果前面没有数字,则查找单个数字

2024-06-09 07:35:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串列表,如果前面没有数字,我想使用正则表达式来获得一个数字

strings = ['5.8 GHz', '5 GHz']

for s in strings:
    print(re.findall(r'\d\s[GM]?Hz', s))

# output
['8 GHz']
['5 GHz']

# desired output
['5 GHz']

我希望它只返回'5GHz',第一个字符串不应该有任何匹配项。如何修改模式以获得所需的输出


Tags: 字符串inre列表foroutput模式数字
3条回答

最新答案

import re
a = ['5.8 GHz', '5 GHz', '8 GHz', '1.2', '1.2 Some Random String', '1 Some String', '1 MHz of frequency', '2 Some String in Between MHz']
res = []
for fr in a:
    if re.match('^[0-9](?=.[^0-9])(\s)[GM]Hz$', fr):
        res.append(fr)
print(res)

输出: ['5 GHz', '8 GHz']

>>> strings = ['5.8 GHz', '5 GHz']
>>> 
>>> for s in strings:
...     match = re.match(r'^[^0-9]*([0-9] [GM]Hz)', s)
...     if match:
...         print(match.group(1))
... 
5 GHz

根据我的评论,您似乎可以使用:

(?<!\d\.)\d+\s[GM]?Hz\b

这符合:

  • (?<!\d\.)-断言位置的负查找不在任何一位数字和文字点之后
  • \d+-1+个匹配频率整数部分的数字
  • [GM]?Hz-可选大写字母G或M后跟“Hz”
  • \b-单词边界

相关问题 更多 >