我有这样一个字符串:
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']
