我正在尝试删除除某些短语以外的所有内容。我想知道是否仅使用正则表达式可以解决此问题?
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,因此希望不被视为重复项)
答案 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)
可以忽略大小写,因此您无需将字符串转换为任何大小写。