【问题标题】:Java replace Japanese characters with \\p{Katakana} regular expressionJava 用 \\p{Katakana} 正则表达式替换日文字符
【发布时间】:2016-11-12 13:51:53
【问题描述】:

我已经关注link

用户“slevthan”使用\p{Katakana}提供服务

public static void main(String[] args) {
    String str = "マイポケット (1).csv";
    str=    str.replaceAll(  "[\\p{Katakana}]", "_");//.replaceAll("\\p{Z}", "_");
    System.out.println(str);
}

但我得到一个错误:

Exception in thread "main" java.util.regex.PatternSyntaxException: Unknown character property name {Katakana} near index 12
[\p{Katakana}]

我正在使用 java 8 。 用 String replaceAll 检查日文字符的正确语法是什么?

【问题讨论】:

  • 你是用javac -encoding UTF-8编译的吗?
  • 或试试str = str.replaceAll( "[\\p{InKatakana}]", "_");
  • 字母ポ不被识别为片假名。你能帮帮我吗?

标签: java regex replaceall


【解决方案1】:

当使用负前瞻时,最好的解决方案是使用这个正则表达式。

str.replaceAll("(?![-,.,/p{Han}/p{Hiragana}/p{Katakana},\\p{IsAlphabetic}\\p{IsDigit}])[\\p{Punct}\\s]", "_");

【讨论】:

    【解决方案2】:

    我需要同时支持英文和日文字母

    那个正则表达式成功了:

    str.replaceAll(  "[/p{Han}/p{Hiragana}/p{Katakana}&&[^\\.^\\p{IsAlphabetic}^\\p{IsDigit}^-]]", "_");
    

    【讨论】:

    • [\\p{InKatakana}\\w] 如果你想要英文字符也可以使用
    • 你为什么要使用^ 三次?
    • 使用 /p 它在 java 8 中的工作 - 这就像写 \\p
    • @rock321987 如果我想支持所有可能的语言怎么办?
    • @rock321987 注意 /p{Katakana} 和 \\p{InKatakana} 不一样 \\p{InKatakana} 不支持 /p{Katakana} 支持的字母 ポ
    猜你喜欢
    • 2014-08-25
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多