忽略正则表达式术语的拆分?

时间:2019-06-27 10:07:43

标签: java regex string

我有一个字符串,它是StringRegex的组合。我想拆分给定的字符串并将其存储到Array中,但不想拆分正则表达式。正则表达式可以出现在字符串中的任何位置。 /表示正则表达式模式的开始和结束。

示例:

  1. Hello world /[0-9]{4}[ K][a-z]{2}/
  2. /^[a-z]{5,10}/ meetings
  3. Start /[A-Z]) ^[0-9]{3}/ prepration

这是我现在拥有的

private static final Pattern ignoreSpaceInRegex = 
            Pattern.compile("\\s+", Pattern.UNICODE_CHARACTER_CLASS);
public static String[] getEachWord(String givenString) {
    return ignoreSpaceInRegex.split(givenString);
}

1 个答案:

答案 0 :(得分:1)

您可以将任务切换为使用正则表达式来代替Pattern.split(),该正则表达式将查找字符串中的所有单词。因此,您可以使用以下正则表达式:

/[^/]+?/|\S+

这匹配一个正则表达式(假设它以/开始和结束)或一个单词(没有空格)。这是完整的方法:

private static final Pattern FIND_WORDS_PATTERN =
        Pattern.compile("/[^/]+/|\\S+", Pattern.UNICODE_CHARACTER_CLASS);

public static List<String> getEachWord(String givenString) {
    List<String> words = new ArrayList<>();
    Matcher m = FIND_WORDS_PATTERN.matcher(givenString);
    while (m.find()) {
        words.add(m.group());
    }
    return words;
}

您的示例的结果如下:

  1. Hello world /[0-9]{4}[ K][a-z]{2}/

    ["Hello", "world", "/[0-9]{4}[ K][a-z]{2}/"]
    
  2. /^[a-z]{5,10}/ meetings

    ["/^[a-z]{5,10}/", "meetings"]
    
  3. Start /[A-Z]) ^[0-9]{3}/ prepration

    ["Start", "/[A-Z]) ^[0-9]{3}/", "prepration"]