0

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

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

魔芋(英文发音:/ˈkoʊnjæk/)

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

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

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

魔芋在英语中发音为 /ˈkoʊnjæk/。

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

谢谢

4

1 回答 1

1

我会试试这个:

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

它应该匹配主要的发音以及可选的“respell”东西。

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

解释:

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

  • (?:[|]|([^}]))+- 匹配一个管道(不要捕获)或任何不是右大括号的东西(捕获 - 那是你想要的字符)。重复直到字符串的末尾或直到找到 }

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

于 2012-05-04T19:27:44.427 回答