我正在寻找一个正确的表达式,可以正确匹配有效拼音(例如“sheng”,“sou”(同时忽略无效拼音,例如“shong”,“sei”)大多数正则表达式在顶部Google搜索结果中匹配无效拼音有些情况下, 。例如,“Optimizing a regular expression to parse chinese pinyin”采用回溯期正则表达式匹配拼音
有效拼音的表格可以在这里找到: http://pinyin.info/rules/initials_finals.html
我正在寻找一个正确的表达式,可以正确匹配有效拼音(例如“sheng”,“sou”(同时忽略无效拼音,例如“shong”,“sei”)大多数正则表达式在顶部Google搜索结果中匹配无效拼音有些情况下, 。例如,“Optimizing a regular expression to parse chinese pinyin”采用回溯期正则表达式匹配拼音
有效拼音的表格可以在这里找到: http://pinyin.info/rules/initials_finals.html
我去了拼音最初(通常是第一个字母)分组较小正则表达式的正则表达式。这样,第一组包括所有的“B”,“P”和“m”的声音,然后“F”,然后是“d”和“t”,等等
这种做法似乎易于阅读,应该很容易编辑(如果需要更正或添加)。为了提高可读性,我还在乞讨小组中增加了例外情况。
([mM]iu|[pmPM]ou|[bpmBPM](o|e(i|ng?)?|a(ng?|i|o)?|i(e|ng?|a[no])?|u))|
([fF](ou?|[ae](ng?|i)?|u))|([dD](e(i|ng?)|i(a[on]?|u))|
[dtDT](a(i|ng?|o)?|e(i|ng)?|i(a[on]?|e|ng|u)?|o(ng?|u)|u(o|i|an?|n)?))|
([nN]eng?|[lnLN](a(i|ng?|o)?|e(i|ng)?|i(ang|a[on]?|e|ng?|u)?|o(ng?|u)|u(o|i|an?|n)?|ve?))|
([ghkGHK](a(i|ng?|o)?|e(i|ng?)?|o(u|ng)|u(a(i|ng?)?|i|n|o)?))|
([zZ]h?ei|[czCZ]h?(e(ng?)?|o(ng?|u)?|ao|u?a(i|ng?)?|u?(o|i|n)?))|
([sS]ong|[sS]hua(i|ng?)?|[sS]hei|[sS][h]?(a(i|ng?|o)?|en?g?|ou|u(a?n|o|i)?|i))|
([rR]([ae]ng?|i|e|ao|ou|ong|u[oin]|ua?n?))|
([jqxJQX](i(a(o|ng?)?|[eu]|ong|ng?)?|u(e|a?n)?))|
(([aA](i|o|ng?)?|[oO]u?|[eE](i|ng?|r)?))|
([wW](a(i|ng?)?|o|e(i|ng?)?|u))|
[yY](a(o|ng?)?|e|in?g?|o(u|ng)?|u(e|a?n)?)
这是我创建的Debuggex example。
嗯由于某种原因,我似乎无法让它匹配“shi”,“zhi”,“zi”,“si”等? – redshift5
我修改了您的表达方式,以包含缺少的“我”匹配器:https://www.debuggex.com/r/JG_eVfJIoxGtkmQ_ – redshift5
谢谢。就像我说的那样,编辑起来更容易! – stevendaniels
我会用相结合的方式,是不是纯粹的正则表达式。
检查有效拼音:
抢字从单词的开头
抢字母,只要他们都是辅音字母。这将初始声音与最终声音分开。
检查最初和最后的有效...
...如果是的话,看看他们的组合是允许的(通过表像this,但条目是简单的1和0) 。
你说“sou”既有效又无效。 – mareoraft
好的。 “Sou”是有效的,所以我把第二个改成了“sei”,这是无效的拼音。 – stevendaniels
伟大的问题。对于实际应用,查找表比正则表达式有几个优点。 –