Skip to main content
 首页 » 编程设计

Python 重新查找

2025年05月04日14lhb25

我试图检索所有包含“名称”字段的标签,然后处理整个句子加上名称。 这是我的测试代码:

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)