![](/img/trans.png)
[英]Python: regex condition to find lower case/digit before capital letter
[英]Python regex find single digit if no digits before it
我有一个字符串列表,如果前面没有数字,我想使用正则表达式来获取单个数字。
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']
我希望它只返回“5 GHz”,第一个字符串不应该有任何匹配。 如何修改我的模式以获得所需的 output?
>>> 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\.)
- 在任何单个数字和文字点之后,断言 position 的否定回溯都不正确。\d+
- 1+ 个数字与频率的 integer 部分匹配。[GM]?Hz
- 可选的大写 G 或 M,后跟“Hz”。\b
- 单词边界。更新的答案
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)
Output: ['5 GHz', '8 GHz']
我的两分钱:
selected_strings = list(filter(
lambda x: re.findall(r'(?:^|\s+)\d+\s+(?:G|M)Hz', x),
strings
))
使用['2 GHz', '5.8 GHz', ' 5 GHz', '3.4 MHz', '3 MHz', '1 MHz of Frequency']
作为strings
,这里selected_strings
:
['2 GHz', ' 5 GHz', '3 MHz', '1 MHz of Frequency']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.