RegEx:用另一个字符串拆分字符串,包括变音符号

时间:2013-10-08 15:30:59

标签: c# regex split diacritics

我一直在尝试通过C#中的RegEx.Split()方法将字符串拆分为另一个字符串。 数据或分离器都可能有变音符号。

让我举个例子:

数据: education

分离器:

预期结果: e / du / cation

- 或 -

数据: èdùcation

分离器: ed

预期结果: èd / ùcation

有可能吗? 如果是的话,你能帮我写一下这个模式吗?

1 个答案:

答案 0 :(得分:1)

.NET的正则表达式引擎中没有“忽略变音符号”的选项,但是可以通过使用Unicode普通形式-D(用于“分解”)来解决它。 这是未经测试的

重音字符可以用两种方式表示:

  • 作为单个预先编写的代码点。例如。 U + 00F9(带坟墓的拉丁文字母小写)。
  • 作为基本代码点后跟一个或多个组合字符。例如。 U + 0075,U-0300(拉丁文小写字母U,结合严重重音)。

因此,如果您确保输入数据被分解(使用String.Normalise(normalization)传递NormalizationForm.FormD),并且模式中任何可能重音的字符都被替换为

B\p{Mc}*

基本字符B,后跟Unicode类别“Mark,Spacing Combining”中的零个或多个代码点。

要在输出中包含与正则表达式匹配的文本,请将其捕获,以便匹配并捕获du使用(du\p{Mc}*)