Skip to main content
 首页 » 编程设计

python之如何使用正则表达式将文本中的值对提取到列表中

2025年05月04日23powertoolsteam

我有这样一个字符串:

string='<final:company name>  abc. </final:company name> <final:number of employees> 143.</final:number of employees> <final: average salary>  medium. </final: average salary>' 

我要提取的是所有模式表达式标题,然后是 < > 中的值.所以,我想要:-公司名称,-员 worker 数,-一份 list 中的平均工资。
我想分别提取值,如:abc、143、medium

当我编码如下时:

regex='<final:(.*?)</final' 
pattern=re.compile(regex) 
finding=re.findall(pattern,string) 
print(finding) 

我得到 ['公司名称> abc。 ', '员 worker 数>143人。', '平均工资>中等。 '] 这不是我正在寻找的东西。我该如何正确编码?

请您参考如下方法:

你可以使用这个正则表达式:

regex = r'<final:([^>]*)>\s*([^<\s\.]*)' 

第 1 组将包含标签,即公司名称、员 worker 数、平均工资,第 2 组将包含它们的值,即 abc、143、medium。

现场演示 here

输出

>>> pattern=re.compile(regex) 
>>> finding=re.findall(pattern,string) 
>>> print(finding) 
[('company name', 'abc'), ('number of employees', '143'), (' average salary', 'medium')] 

要根据您的发现 制作 2 个不同的列表,您可以这样做:

>>> tags = map(lambda x: x[0], finding) 
>>> values = map(lambda x: x[1], finding) 
>>> tags 
['company name', 'number of employees', ' average salary'] 
>>> values 
['abc', '143', 'medium'] 

或者你也可以使用zip将其转换为两个列表:

>>> tags, values = map(list, zip(*finding)) 
>>> tags 
['company name', 'number of employees', ' average salary'] 
>>> values 
['abc', '143', 'medium']