我正在尝试使正则表达式匹配跨越多行的值。我正在使用re.S标志,但仍然没有结果。有什么想法吗?
这是我正在搜索的文字:
<File id="abc.txt" EngRev="74">
<Identifier id="STRING_ID" isArray="1" goesWith="3027253">
<EngTranslation>"Value 1","Value 2","Value 3","Value 4","Value 5",</EngTranslation>
<LangTranslation filename="abc.txt" key="STRING_ID 0">Value 1</LangTranslation>
<array filename="abc.txt" key="STRING_ID 1">Value 2</array>
<array filename="abc.txt" key="STRING_ID 2">Value 3</array>
<array filename="abc.txt" key="STRING_ID 3">Value 4</array>
<array filename="abc.txt" key="STRING_ID 4">Value 5</array>
</Identifier>
<Identifier id="STRING_ID2" isArray="0" goesWith="3027253">
<EngTranslation>"Value 1"</EngTranslation>
<LangTranslation filename="abc.txt" key="STRING_ID2">Value 1</LangTranslation>
</Identifier>
</File>
这是我用来获取匹配项的代码:
def updateToArray(matchobj):
return matchobj.group(0).replace('LangTranslation','array')
outXML = re.sub(r'<Identifier.*?<array.*?</Identifier>', updateToArray, outXML, re.S)
答案 0 :(得分:7)
我强烈建议您不要使用正则表达式来解析XML。 SO有lot of个问题/答案主题解释原因。例如,请参阅this classic。
由于您使用的是Python,为什么不使用像BeautifulSoup或Lxml这样的库来更干净,更简洁地完成工作?
答案 1 :(得分:1)
你错过了一个论点:
re.sub(pattern, repl, string[, count, flags])
标志似乎是整数,因此它将re.S
视为count
参数。对count
使用零会保留默认行为,并允许您将标志作为第五个参数传递。