Python正则表达式查找由3个数字后跟特定字符串组成的序列

2024-04-20 13:05:11 发布

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

我有一个正则表达式模式,它匹配由一个逗号和空格分隔的三个数字,但我现在希望该模式在这些数字之后找到“MHz”或“GHz”

我试过几种模式,但都不管用

failed_patterns = [r'(\d+\, \d+\, \d+\s*Hz)',
                   r'(\d+\, \d+\, \d+\s*Hz)',
                   r'(\d+\, \d+\, \d+*Hz)']

# basic pattern
pattern = r'(\d+\, \d+\, \d+)'
string = '915, 868, 433 MHz'
re.findall(pattern, string)
# output: ['915, 868, 433']

正则表达式对我来说还是很新的,所以如果有人能告诉我哪里出了问题,以及如何改变我的模式以得到我需要的结果,我将不胜感激


Tags: reoutputstringbasic模式数字patternspattern
3条回答

模式r"\d+(, | [MG]Hz)"将使用逗号匹配所有数字,并在结尾处使用MHz或GHz在旁边添加空格

r"":Python用于转义正则表达式内部特殊字符的原始字符串表示法
\d+:等于[0-9],匹配任何数字序列(1个或多个)(\d匹配单个数字)
():捕获组,如果没有它,regex将尝试只查找数字序列+逗号和空格+M/GHz组合
, | [MG]Hz:匹配组合(, )或( GHz MHz

此模式适用于您的测试示例:r'(\d{0,3}, \d{0,3}, \d{0,3} [MG]Hz)'

您可以创建两个组,一个用于三个数字的序列,另一个用于单元

import re
pattern =  r'(\d+, \d+, \d+) ([MG]Hz)'
string = '915, 868, 433 MHz'
list_match =re.findall(pattern, string)
for match in list_match:
    print("numbers: {} and unit: {}".format(match[0], match[1]))

输出:

numbers: 915, 868, 433 and unit: MHz

相关问题 更多 >