繁体   English   中英

如何根据正则表达式中的关键字进行拆分,然后根据 Java 中的空格进行拆分?

[英]How to split based on keywords in regex, then whitespace in Java?

我想根据三个因素拆分一个字符串。

  1. 正则表达式不区分大小写

  2. 如果字符串包含任何术语“Red hot”、“Ice cold”、“Warm”或“Mild” 例如,如果字符串是“Red hot Ice cold”,当我在字符串上运行.split(regex) ,我应该得到一个数组,其中“红热”和“冰冷”作为两个单独的条目。

  3. 如果字符串不匹配任何术语,则应根据空格进行拆分。 因此,例如,如果字符串是“Red Ice”,它应该拆分成一个包含“Red”和“Ice”的数组。 它目前分裂成“红冰”作为数组中的一个条目。 如果字符串是“Red hot Ice cold red”,它应该拆分成包含“Red hot”、“Ice cold”和“red”的数组。 它目前分为“红热”和“冰冷红”。

到目前为止,我的正则表达式是"(?i)\s(?=("Red hot"|"Ice cold"|"Warm"|"Mild"))"

我如何添加条件,如果没有任何条款匹配,它应该在空白处分割? 我不明白如何为正则表达式添加优先级。 谢谢大家!

我会建议一种正则表达式模式匹配方法,该方法首先将多词项放在交替中,然后是所有其他单词项:

String input = "I at some red hot not mild food and drank an ice cold Coke";
Pattern r = Pattern.compile("(?i)\\b(?:Red hot|Ice cold|\\w+)\\b");
Matcher m = r.matcher(input);
List<String> matches = new ArrayList<>();
while (m.find()) {
    matches.add(m.group());
}
System.out.println(matches);

这打印:

[I, at, some, red hot, not, mild, food, and, drank, an, ice cold, Coke]

请注意,因为WarmMild是单独的词,所以您的默认拆分空格行为应该已经包括它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM