python - 将捕获组转换为命名捕获组
问题描述
我将如何将简单的捕获组转换为命名的捕获组,如果我将名称作为列表提供,我通常在 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"
谢谢!
解决方案
您需要添加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)
推荐阅读
- python - 使用 psycopg2 对多组参数执行查询
- java - 尝试创建 RequestSpecBuilder 对象时出现 NoSuchMethodException
- android - Fastlane 分发失败并出现错误“应用程序分发找不到您的应用程序”
- vb.net - 如何使用 Visual Studio VB.NET 计算 Access 数据库中的值
- javascript - 使用 axios 在没有网络的情况下在 React 应用程序上工作
- c++ - 为什么 libstdc++ 两者都实现
和 迭代器上的二元运算符重载? - reactjs - 将 react-transition-group 与 TypeScript 一起使用时“任何值的不安全分配”
- nlp - 为不同的词嵌入算法预处理语料库
- google-sheets - Google 电子表格 - 如何从 Wikipedia 导入特定表格?
- javascript - 如何通过添加总计和排序进行自动类型推断