Заменить все, кроме ОДНОГО символа - PullRequest
2 голосов
/ 13 июля 2020

Я имею дело с некоторыми ячейками, где мне нужно извлечь определенные буквы из этих ячеек. Я хочу заменить всю строку на "", кроме одного стоящего символа. Самая большая проблема для меня заключалась в том, чтобы сообщить свой код Regex только для поиска одного Char и удаления всего остального. Доработать и упростить; Мне нужно, чтобы мое регулярное выражение заменяло все на "", кроме одного символа, который стоит ОДИН (пробелы IE слева и справа или связаны с числом)

public class Main {
    public static void main(String[] args) {
        String test = "22A 302 abc";
        String works = test.replaceAll("^\\w[\\s\\S]*", " ");
        System.out.println(works);
        //Desired result: A
    }
}

Ответы [ 2 ]

4 голосов
/ 13 июля 2020

Вы можете сопоставить di git или пробел до и после захвата char [A-Z].

В группе замены используйте 1.

^.*[\d ]([A-Z])[ \d].*$

Regex demo | Java demo

Если в строке может быть только один символ верхнего регистра:

^[^A-Z]*[\d ]([A-Z])[ \d][^A-Z]*$

Regex demo

Пример кода

String test = "22A 302 abc";
String works = test.replaceAll("^.*[\\d ]([A-Z])[ \\d].*$", "$1");
System.out.println(works);

Вывод

A

Для соответствия между цифрами 0–9, горизонтальными пробелами или знаками препинания:

String works = test.replaceAll("^.*[\\p{P}0-9\\h]([A-Z])[\\p{P}0-9\\h].*$", "$1");
0 голосов
/ 13 июля 2020

Вы можете сделать это следующим образом:

public class Test {

    public static void main(String[] args) {
        String test = "22A 302 abc";
        String works = test.replaceAll("\\d+([A-Z]).*", "$1");
        System.out.println(works);
    }
}

Вывод:

A

Пояснение: Заменить все на группу захвата- 1 ($1 в приведенном выше коде), который имеет только букву A-Z, перед которой стоит целое число (\\d+), и может иметь что угодно (.*) после нее.

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