我正在尝试解析维基百科页面,需要使用正则表达式提取页面的特定部分。在下面的数据中,我只需要在{{Infobox ...}}部分中提取数据。
{{Infobox XC Championships
|Name = Senior men's race at the 2008 IAAF World Cross Country Championships
|Host city = [[Edinburgh]], [[Scotland]], [[United Kingdom]] {{flagicon|United Kingdom}}
|Location = [[Holyrood Park]]
|Nations participating = 45
}}
2008.<ref name=iaaf_00>
{{ Citation
| last =
| publisher = [[IAAF]]
}}
所以在上面的例子中,我只需要提取
Infobox XC Championships
|Name = Senior men's race at the 2008 IAAF World Cross Country Championships
|Host city = [[Edinburgh]], [[Scotland]], [[United Kingdom]] {{flagicon|United Kingdom}}
|Location = [[Holyrood Park]]
|Nations participating = 45
请注意{{Infobox ...}}部分中可能有嵌套的{{}}个字符。我不想忽略它。
以下是我的正则表达式:
\\{\\{Infobox[^{}]*\\}\\}
但它似乎不起作用。请帮忙。谢谢!
答案 0 :(得分:4)
由于信息框部分的格式化,实际上可以使用正则表达式。
诀窍是,您甚至不会处理嵌套的{{...}}
元素,因为每个元素都将以|
开头。
{{(Infobox.*\r\n(?:\|.*\r\n)+)}}
{{ start of the string
(Infobox start of the capturing group
.*\r\n any characters until a line break appears
(?:
\| line has to start with a |
.*\r\n any characters until a line break appears
)
+ the non-capturing group can occur multiple times
) end of capturing group
}}
因此,在Infobox
- 部分内,您只需匹配以|
开头的行,直到}}
弹出。
您可能需要尝试使用\r\n
,具体取决于您的平台/语言。 \r\n
与\n
一样正常,但Debuggex仅匹配{{1}}
答案 1 :(得分:0)
不要使用正则表达式。遵循此算法
1&gt;将counter
初始化为0
counter
时, 2&gt;增加{{
3&gt;找到counter
}}
4&gt;重复步骤2和3,直到计数器为0