首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Python中的regex从字符串中提取多个值?

如何使用Python中的regex从字符串中提取多个值?
EN

Stack Overflow用户
提问于 2021-09-01 14:30:21
回答 2查看 90关注 0票数 0

我需要解析一个字符串并将子字符串提取为一个变量。字符串是不一样的。实例和预期结果:

代码语言:javascript
复制
string 1 (no "NAME" pattern): "RB2 F 27/0/31 0/32, R8 28/31/120 2/0/2"
result 1 (save "as is"): "RB2 F 27/0/31 0/32, R8 28/31/120 2/0/2"

string 2 (comma separated "<key>:<value>" pairs): "TYPE :ABC,NAME: AB.DE,DESC:10/10/5:2,COMMENT: , ID:123"
result 2 (extracted comma separated "<key>=<value>" substrings): "TYPE=ABC","NAME=AB.DE","DESC=10/10/5:2","COMMENT=","ID=123"

string 3: "ID:123, NAME:CDE,DESC:10-10/5:2"
result 3: "ID=123","NAME:CDE","DESC=10-10/5:2"

使用"re.compile“和”拆分“,但找不到适合上述所有示例的正则表达式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-01 17:32:07

您可以使用下面的regex查找findall()的键值对。然后用=加入他们

代码语言:javascript
复制
([a-zA-Z ]+):(.*?)(?:,|$)

演示这里

样例程序

代码语言:javascript
复制
import re

inputs=["RB2 F 27/0/31 0/32, R8 28/31/120 2/0/2",
"TYPE :ABC,NAME: AB.DE,DESC:10/10/5:2,COMMENT: , ID:123",
"ID:123, NAME:CDE,DESC:10-10/5:2"]

output=[]
for line in inputs:
    output.append([a+'='+b for a,b in re.findall("([a-zA-Z ]+):(.*?)(?:,|$)",line)] or line)
    
print(output)

输出

代码语言:javascript
复制
[
 'RB2 F 27/0/31 0/32, R8 28/31/120 2/0/2',
 ['TYPE =ABC', 'NAME= AB.DE', 'DESC=10/10/5:2', 'COMMENT= ', ' ID=123'],
 ['ID=123', ' NAME=CDE', 'DESC=10-10/5:2']
]
票数 0
EN

Stack Overflow用户

发布于 2021-09-01 14:40:23

如果可以假设键中没有“:”,则不需要正则表达式。

代码语言:javascript
复制
if ':' in string:
    string = string.replace(' ', '')
    string = string.split(',')
    for (i, word) in enumerate(string):
        string[i] = word.replace(':', '=', 1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69015729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档