我想从Wikipedia标记中解析出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}})


魔芋(英语发音:/ ˈ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

谢谢

最佳答案

我会尝试一下:

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


它应与主要发音以及可选的“ repell”事物相匹配。

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

说明:


IPAc-en(?:\w|[|])+.-尽可能匹配开头和然后的字符或管道。匹配另一个字符(这是从头开始的有趣字符)。不要抓任何东西。
(?:[|]|([^}]))+-匹配管道(不捕获)或不是右花括号(捕获-这就是您想要的字符)的任何其他字符。重复此操作,直到字符串末尾或找到}
(?:}}\s*{{respell(?:[|]|([^}]))+)?-然后选择匹配方括号并拼写文字,并使用与上述相同的逻辑捕获字母。

10-04 22:37