我试图检索所有包含“名称”字段的标签,然后处理整个句子加上名称。 这是我的测试代码:
sourceCode = '<dirtfields name="one" value="stuff">\n<gibberish name="two"\nwewt>'
namesGroup = re.findall('<.*name="(.*?)".*>', sourceCode, re.IGNORECASE | re.DOTALL)
for name in namesGroup:
print name
哪个输出是:
two
我要寻找的输出是
['<dirtfields name="one" value="stuff">', 'one']
['<gibberish name="two"\nwewt>', 'two']
编辑: 找到了一种方法,感谢 doublesharp 以更简洁的方式获取“名称”值。
namesGroup = re.findall(r'(<.*?name="([^"]*)".*?>)', sourceCode, re.IGNORECASE | re.DOTALL)
输出:
('<dirtfields name="one" value="stuff">', 'one')
('<gibberish name="two"\nwewt>', 'two')
请您参考如下方法:
你的正则表达式有点不对劲——你匹配的太多了(一直到最后一个 >)。由于您只需要在 name= 之后的双引号之间输入值,请使用以下模式:
name="([^"]*)"
name="匹配您要查找的属性的第一部分([^"]*)根据任何不是双引号的字符创建分组匹配"匹配 name 属性值后的双引号。
你的代码看起来像这样(在你的模式之前包含一个 r 是一种很好的形式):
namesGroup = re.findall(r'name="([^"]*)"', sourceCode, re.IGNORECASE)
