【发布时间】:2012-09-20 22:18:28
【问题描述】:
可能重复:
Matching Nested Structures With Regular Expressions in Python
我正在尝试匹配 wiki 页面中的一组数据。下面列出了我正在使用的一些 python 代码。问题是它会在自己组的末尾返回到页面中的最后一个}}。
def findPersonInfo(self):
if (self.isPerson == True):
regex = re.compile(r"{{persondata(.*)}}",re.IGNORECASE|re.UNICODE|re.DOTALL)
result = regex.search(self._rawPage)
if result:
print 'Match found: ', result.group()
wiki 页面内容示例:
*[http://www.jsc.nasa.gov/Bios/htmlbios/acaba-jm.html NASA biography]
{{NASA Astronaut Group 19}}
{{Persondata
|NAME= Acaba, Joseph Michael "Joe"
|ALTERNATIVE NAMES=
|SHORT DESCRIPTION=[[Hydrogeologist]]
|DATE OF BIRTH={{Birth date and age|1967|5|17}}
|PLACE OF BIRTH=[[Inglewood, California]]
|DATE OF DEATH=
|PLACE OF DEATH=
}}
{{DEFAULTSORT:Acaba, Joseph M.}}
[[Category:1967 births]]
我当前的正则表达式返回以下字符串:
{{Persondata
|NAME= Acaba, Joseph Michael "Joe"
|ALTERNATIVE NAMES=
|SHORT DESCRIPTION=[[Hydrogeologist]]
|DATE OF BIRTH={{Birth date and age|1967|5|17}}
|PLACE OF BIRTH=[[Inglewood, California]]
|DATE OF DEATH=
|PLACE OF DEATH=
}}
{{DEFAULTSORT:Acaba, Joseph M.}}
我希望它返回:
{{Persondata
|NAME= Acaba, Joseph Michael "Joe"
|ALTERNATIVE NAMES=
|SHORT DESCRIPTION=[[Hydrogeologist]]
|DATE OF BIRTH={{Birth date and age|1967|5|17}}
|PLACE OF BIRTH=[[Inglewood, California]]
|DATE OF DEATH=
|PLACE OF DEATH=
}}
棘手的一点是它需要计算其他{{ 打开和}} 关闭才能知道我想停在哪个组,但我不知道如何让正则表达式做到这一点。
【问题讨论】:
-
你应该使用正确的Wiki parser... 这不是常规语言 BTW
-
@JBernardo - 我不需要完整的解析器,我只需要整个页面中的一个部分,我可以将其拆分为键/值对。
-
@Justin808 这就是您需要解析器的原因。正则表达式不适用于具有任意深度级别的语言。您可以使其适用于某些特定情况,但您不应该
-
@JBernardo - 我想,但我宁愿不必使用完整的外部 wiki 解析器。我希望使用带有一些 .splits() 的正则表达式结果来获得我需要的东西。我正在尝试使用系统上预装的东西。
-
带有嵌套的 {{ 你真的应该使用解析器/语法 ....