我有一个这样的字符串:
string='<final:company name> abc. </final:company name> <final:number of employees> 143.</final:number of employees> <final: average salary> medium. </final: average salary>'
我想要提取的是所有模式表达式标题,然后是< >
内的值。所以,我想: - 公司名称, - 员工数量, - 平均薪水可能在一个列表中
我想分别提取值,如: abc,143,medium
当我编码如下:
regex='<final:(.*?)</final'
pattern=re.compile(regex)
finding=re.findall(pattern,string)
print(finding)
我得到[&#39;公司名称&gt; ABC。 &#39;,&#39;员工人数&gt; 143。&#39;,&#39;平均工资&gt;介质。 &#39;] 这不是我想要的东西。我该如何正确编码?
答案 0 :(得分:4)
您可以使用此正则表达式:
void MyFrame::OnItemChecked(wxTreeListEvent& event)
{
wxTreeListItem item = event.GetItem();
wxCheckBoxState itemCheckboxState =m_treelist->GetCheckedState(item);
m_treelist->CheckItemRecursively(item, itemCheckboxState);
}
您的第1组将包含标签,即公司名称,员工人数,平均工资和第2组将包含其值,即abc,143,medium。
现场演示here
<强>输出强>
regex = r'<final:([^>]*)>\s*([^<\s\.]*)'
要从>>> pattern=re.compile(regex)
>>> finding=re.findall(pattern,string)
>>> print(finding)
[('company name', 'abc'), ('number of employees', '143'), (' average salary', 'medium')]
制作2个不同的列表,您可以执行以下操作:
finding
或者您也可以使用>>> 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
答案 1 :(得分:1)
允许内容中的空格并删除标记名称中的空格
import re
string='<final:company name> abc. </final:company name> <final:number of employees> 143.</final:number of employees> <final: average salary> medium. </final: average salary>'
rx = re.compile(r'''
<final:\s*
(?P<tag>[^>]+)>
(?P<content>[^<]+)
</final:\1>''', re.X)
results = {m.group('tag').strip(): m.group('content').strip() for m in rx.finditer(string)}
print(results)
# {'number of employees': '143.', 'company name': 'abc.', 'average salary': 'medium.'}
<小时/> 之后,您将能够访问
results['company name']
等元素
一般来说,这看起来像一些(无效?)XML
文件。如果它是有效的(并且你在复制到问题时只是有一些拼写错误)考虑使用真正的解析器。