解析维基百科的IPAc

时间:2012-05-04 18:18:04

标签: java regex

我想从维基百科标记中解析出IPAc模板的内容,例如:

'''Konjac''' ({{IPAc-en|lang|pron|ˈ|k|oʊ|n|j|æ|k}})

Konjac(英语发音:/koʊnjæk/)

'''Konjac''' ({{IPAc-en|lang|pron|ˈ|k|oʊ|n|j|æ|k}} {{respell|KOHN|yak}})

Konjac(英文发音:/koʊnjæk/ kohn-yak)

''Konjac'' is pronounced {{IPAc-en|ˈ|k|oʊ|n|j|æ|k}} in English.

Konjac发音为/koʊnjæk/ in English。

我需要提取哪些正则表达式才能提取此内容|k|oʊ|n|j|æ|k我不知道如何匹配可能存在但可能不存在的内容(lang|pron

谢谢

1 个答案:

答案 0 :(得分:1)

我会尝试一下:

IPAc-en(?:\w|[|])+.(?:[|]|([^}]))+(?:}}\s*{{respell(?:[|]|([^}]))+)?

它应该匹配主要发音以及可选的“重复”事物。

两个发音的匹配将在捕获组中,因此您应该能够从java访问它。

说明:

  • IPAc-en(?:\w|[|])+. - 尽可能多地匹配开头,然后匹配单词字符或管道。匹配另一个角色(这是发音开始的有趣的一个)。不捕捉任何东西。

  • (?:[|]|([^}]))+ - 匹配管道(不捕获)或其他任何不是结束花括号的东西(捕获 - 这是你想要的字符)。重复直到字符串结尾或直到找到}

  • (?:}}\s*{{respell(?:[|]|([^}]))+)? - 然后可选地匹配括号并重新处理文本,并使用与上面相同的逻辑来捕获字母。