如何使用正则表达式修剪字符串?

时间:2017-04-14 12:17:05

标签: java regex string

我有这个字母:{' faa',' fa',' af'} 我有这个字符串:" faaf"

我有这个正则表达式:"(faa | fa | af)*"这有助于我将字符串与字母表匹配。

如何让我的字符串修剪为:{fa,af},这是写字符串的正确方法:" faaf"根据我的字母表?

这是我的代码:

        String regex = "(faa|fa|af)*";
        String str = "faaf";
        boolean isMatch = Pattern.matches(regex, str);
        if(isMatch)
        {
          //trim the string
            while(str.length()!=0)
            {
                Pattern pattern = Pattern.compile("^(faa|fa|af)(faa|fa|af)*$");
                Matcher mc = pattern.matcher(str);
                if (mc.find())
                {
                     String l =mc.group(1);
                     alphabet.add(l);
                     str = str.substring(l.length());
                     System.out.println("\n"+ l);

                }
            }
        }

感谢Aaron帮我解决了这个问题。

1 个答案:

答案 0 :(得分:0)

您需要循环。

Pattern pattern = Pattern.compile(regex + "*");
LinkedList<String> parts = new LinkedList<>();
while (!str.isEmpty()) {
    Matcher m = pattern.matcher(str);
    if (!m.matches()) { // In the first loop step.
        break;
    }
    parts.addFirst(m.group(1)); // The last repetition matching group.
    str = str.substring(0, m.start(1));
}
String result = parts.stream().collect(Collectors.joining(", ", "{", "}"));

这利用了匹配(X)+将在m.group(1)中产生最后出现的X值。

不幸的是,正则表达式模块没有提供无聊的matches,例如重载replaceAll且lambda处理单个MatchResult。

请注意,matches适用于整个字符串。