Java регулярное выражение: удалить все, кроме указанных c фраз и слов - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь удалить все, кроме определенных фраз. Мне было интересно, если бы было аккуратное решение этого с использованием только регулярных выражений:

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,"");

Единственная проблема с этим заключается в том, что он не работает хорошо с фразами, только отдельные слова ...

Возвращает: "восточноафриканский испани c"

Вместо: "восточноазиатский афроамериканский испани c"

Я пытался использовать скобки и Я также посмотрел на этот вопрос , который кажется похожим, но я хотел посмотреть, есть ли лучшее решение, чем данное (оно также не java, так что, надеюсь, не считается дубликатом)

1 Ответ

2 голосов
/ 14 апреля 2020

Используйте (?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) существует для игнорирования регистра так что вам не нужно конвертировать строку в любом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...