【发布时间】:2017-05-07 11:42:42
【问题描述】:
我正在构建 Java 语音控制计算器,但在解析输入时遇到问题。例如我有输入
十除以五
我想把这个字符串按空格分割成一个数组,但我希望“除以”不被分割,所以输出应该是这样的
- 十个
- 除以
- 五个
请帮忙。我尝试使用正则表达式,但没有成功。
非常感谢。
【问题讨论】:
标签: java regex parsing text-parsing string-parsing
我正在构建 Java 语音控制计算器,但在解析输入时遇到问题。例如我有输入
十除以五
我想把这个字符串按空格分割成一个数组,但我希望“除以”不被分割,所以输出应该是这样的
请帮忙。我尝试使用正则表达式,但没有成功。
非常感谢。
【问题讨论】:
标签: java regex parsing text-parsing string-parsing
您可以定义一个非拆分短语列表(例如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));
}
【讨论】:
解决此问题的另一种方法是,如果您有一个小数据集,并且您知道以下单词的大小(不应被空格分隔)始终为 2 个字母或更少,您可以尝试类似于以下的正则表达式:
\s(?=\w{2}\S)
【讨论】: