如何为汉字写正则表达式

时间:2017-11-23 08:17:31

标签: java selenium pattern-matching

我需要知道如何将汉字编成以下单词 50,001 - 100,000积分

例如:英文措辞:50,001 - 100,000分。这是英文写的文字

Pattern pattern = Pattern.compile("([A-Z]+\\s[A-Z]+)|(\\d+\\s(\\-|or)\\s(\\d|[a-z])+\\s"+Internationalization.getMessage("POINTS_RANGE_FILTER_POINTS")+")"

2 个答案:

答案 0 :(得分:1)

您可以使用\p{L} Unicode属性类来匹配任何Unicode字母。此外,您的模式需要进行一些调整以匹配整体数字。请参阅下面的修复:

\d+(?:,\d{3})*\s*(?:(?:-|or)\s*\d+(?:,\d{3})*\s*)?\p{L}+

请参阅regex demo

在Java中:

String rx = "\\d+(?:,\\d{3})*\\s*(?:(?:-|or)\\s*\\d+(?:,\\d{3})*\\s*)?\\p{L}+";

注意:如果您不太关心正则表达式的精确度(例如,只提取这些子字符串时),您可以将\\d+(?:,\\d{3})*缩短为\d[\d,]*。请参阅another regex demo

<强>详情

  • \d+ - 一位或多位
  • (?:,\d{3})* - 0个连续的,和3位数
  • 序列
  • \s* - 0+ whitespaces
  • (?:(?:-|or)\s*\d+(?:,\d{3})*\s*)? - 匹配的1或0个序列(可选的序列)
    • (?:-|or) - -or
    • \s* - 0+ whitespaces
    • \d+(?:,\d{3})* - 上面的数字模式
    • \s* - 0+ whitespaces
  • \p{L}+ - 1+ Unicode字母。

答案 1 :(得分:0)

您可以按原样编写。 Java支持Unicode。试试这一行

System.out.println("積分".matches(".分"));

它打印真实