Jak używać Pattern, Matcher in Java regex API do usunięcia określonej linii

Oct 19 2020

Mam skomplikowany podział ciągów, muszę usunąć komentarze , spacje i zachować wszystkie liczby, ale zmienić cały ciąg na znak . Jeśli -znak znajduje się na początku, a po nim występuje liczba, traktuj go jako liczbę ujemną, a nie jako operator

komentarz ma styl ?<space>comments<space>?(komentarz jest symbolem zastępczym)

Wejście :

-122+2 ? comments ?sa b
-122+2 ? blabla ?sa b

wynik :

 ["-122","+","2","?","s","a","b"]  

(cały ciąg znaków i bez spacji, bez komentarzy)

Odpowiedzi

2 ArvindKumarAvinash Oct 19 2020 at 05:41
  1. Wymienić niechciane ciąg \s*\?\s*\w+\s*(?=\?)z "". Możesz połączyć, String#replaceAllaby usunąć wszelkie pozostałe spacje. Zauważ, że ?=oznacza to pozytywne spojrzenie w przód, a tutaj oznacza, że \s*\?\s*\w+\s*następuje po ?. Mam nadzieję, że już wiesz, że \sokreśla białe znaki i \wokreśla znak słowa.
  2. Następnie możesz użyć wyrażenia regularnego, ^-\d+|\d+|\Dktóre oznacza ujemną liczbę całkowitą na początku (tj. ^-\d+) Lub cyfry (tj. \d+) Lub niecyfrę ( \D).

Próbny:

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

public class Main {
    public static void main(String[] args) {
        String str = "-122+2 ? comments ?sa b";
        str = str.replaceAll("\\s*\\?\\s*\\w+\\s*(?=\\?)", "").replaceAll("\\s+", "");

        Pattern pattern = Pattern.compile("^-\\d+|\\d+|\\D");
        Matcher matcher = pattern.matcher(str);
        while (matcher.find()) {
            System.out.println(matcher.group());
        }
    }
}

Wynik:

-122
+
2
?
s
a
b