【问题标题】:How to split string by space with exceptions如何按空格分割字符串,但有异常
【发布时间】:2017-05-07 11:42:42
【问题描述】:

我正在构建 Java 语音控制计算器,但在解析输入时遇到问题。例如我有输入

十除以五

我想把这个字符串按空格分割成一个数组,但我希望“除以”不被分割,所以输出应该是这样的

  • 十个
  • 除以
  • 五个

请帮忙。我尝试使用正则表达式,但没有成功。

非常感谢。

【问题讨论】:

    标签: java regex parsing text-parsing string-parsing


    【解决方案1】:

    您可以定义一个非拆分短语列表(例如divide by、equals to),而不是按空格拆分,而是使用交替匹配所有此类短语或单个单词:

    \b(?:divide by|equals to)\b|\w+
    

    演示:https://regex101.com/r/QhNvGo/1

    还有 Java 代码:

    String input = "ten divide by five equals to two";
    Pattern pattern = Pattern.compile("\\b(?:divide by|equals to)\\b|\\w+");
    Matcher matcher = pattern.matcher(input);
    while (matcher.find()) {
        System.out.println(matcher.group(0));
    }
    

    演示:https://ideone.com/X99lMK

    【讨论】:

      【解决方案2】:

      解决此问题的另一种方法是,如果您有一个小数据集,并且您知道以下单词的大小(不应被空格分隔)始终为 2 个字母或更少,您可以尝试类似于以下的正则表达式:

      \s(?=\w{2}\S)
      

      演示:https://regex101.com/r/bugQ4O/1/

      【讨论】:

        猜你喜欢
        • 2011-12-15
        • 1970-01-01
        • 2013-10-11
        • 1970-01-01
        • 2012-08-03
        • 1970-01-01
        • 2010-09-24
        • 1970-01-01
        • 2021-10-05
        相关资源
        最近更新 更多