首页 > 解决方案 > 将捕获组转换为命名捕获组

问题描述

我将如何将简单的捕获组转换为命名的捕获组,如果我将名称作为列表提供,我通常在 python 中编程,但对可能有助于实现这一目标的其他语言开放。

基本示例:

正则表达式:

(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s(\w+)\s(\w+)\s(\d+)

名称:

["ip","name","proto","http_status_code"]

最终结果正则表达式:

(?<ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s(?<name>\w+)\s(?<proto>\w+)\s(?<http_status_code>\d+)

regex_data_to_test:

"172.16.1.1 bob tcp 200"

谢谢!

标签: pythonpython-3.xregexregex-group

解决方案


您需要添加P到每个组,即:

(?P<ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s
(?P<name>\w+)\s
(?P<proto>\w+)\s
(?P<http_status_code>\d+)

Python这可能是

import re

rx = re.compile(r'(?P<ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s(?P<name>\w+)\s(?P<proto>\w+)\s(?P<http_status_code>\d+)')

string = "172.16.1.1 bob tcp 200"

for m in rx.finditer(string):
    print(m.groupdict())

哪个产量

{'ip': '172.16.1.1', 'name': 'bob', 'proto': 'tcp', 'http_status_code': '200'}

在regex101.com上查看您的表达式演示。


请注意,如果您始终使用这种格式,则可以轻松拆分和解包:
string = "172.16.1.1 bob tcp 200"
ip, name, proto, status = string.split()

print(ip)

推荐阅读