Java Regex:删除除特定短语和单词以外的所有内容

时间:2020-04-14 18:55:55

标签: java regex string

我正在尝试删除除某些短语以外的所有内容。我想知道是否仅使用正则表达式可以解决此问题?

String strEthnicity = "the person should be East Asian or African American or Hispanic.";
String strRegex = "\\b(?!hispanic|caucasian|african american|east asian))\\b\\S+";

strEthnicity = strEthnicity.toLowerCase().replaceAll(strRegex,"");

唯一的问题是,它不能与短语(仅单个单词)配合使用...

返回:“东非西班牙裔”

代替:“东亚非裔西班牙裔”

我尝试使用括号,而且我也看过this question,它看起来很相似,但是我想看看是否有比给定的解决方案更好的解决方案(它也不是Java,因此希望不被视为重复项)

1 个答案:

答案 0 :(得分:2)

使用(?i)\\b(hispanic|caucasian|african american|east asian)\\b作为正则表达式。

演示:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        String strEthnicity = "the person should be East Asian or African American or Hispanic.";
        String strRegex = "(?i)\\b(hispanic|caucasian|african american|east asian)\\b";
        Pattern pattern = Pattern.compile(strRegex);
        Matcher matcher = pattern.matcher(strEthnicity);
        while (matcher.find()) {
            System.out.println(matcher.group());
        }
    }
}

输出:

East Asian
African American
Hispanic

请注意,(?i)可以忽略大小写,因此您无需将字符串转换为任何大小写。