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
- 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. - 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