【问题标题】:What regex can match similar characters? [duplicate]什么正则表达式可以匹配相似的字符? [复制]
【发布时间】:2019-03-07 14:00:16
【问题描述】:

什么正则表达式可以匹配相似的字符,例如 (ä 和 a) 或俄语 (и 和 й)? 在我的代码下面...

Sting text1 = " Passagiere noch auf ihr fehlendes Gepäck"
Sting text2 = " Passagiere noch auf ihr fehlendes Gepack"

Pattern p1 = Pattern.compile("\\b" + "Gepack");
Pattern p2 = Pattern.compile("\\b" + "Gepack");

Matcher m1 = p1.matcher(text1); // doesn't find any occurrence
Matcher m2 = p2.matcher(text2) // founds one occurrence

【问题讨论】:

  • 不确定这是正确的副本,因为链接到文章更多的是音译而不是规范化。

标签: java android regex pattern-matching


【解决方案1】:

您可以建立一个包含所有要匹配的字符的字符类,以便将模式一替换为

Pattern p1 = Pattern.compile("\\b" + "Gep[aä]ck");

但这很快就会变得非常繁琐

Unicode 中有一种称为规范化的机制,请参阅here 了解详细信息,它可以让您重新格式化字符串以便以不同方式进行比较。

规范化形式规范分解 (NFD) 采用包含重音字符代码点的字符串并创建多个代码点,从基本字符开始,然后与代码点共同发起以每个重音符号的明确定义的顺序组合重音符号的字符版本字符。

对您的输入执行此操作后,您可以使用正则表达式从字符串中删除所有重音符号,因为它们都将具有 Unicode 属性 Mark,有时缩写为 M

这会为您提供一个仅包含正则表达式将匹配的基本字符的字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-13
    • 2019-07-21
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多