Mam ciąg znaków, który zawiera dwa pojedyncze cudzysłowy - '
znak. Pomiędzy pojedynczymi cudzysłowami znajdują się dane, które chcę.
Jak napisać wyrażenie regularne, aby wyodrębnić „dane, które chcę” z następującego tekstu?
mydata = "some string with 'the data i want' inside";
java
regex
string
text-extraction
asdasd
źródło
źródło
this 'is' my 'data' with quotes
zatrzyma się wcześnie i wróciis
zamiast dopasowywać jak najwięcej znaków i zwróciis' my 'data
, co jest zachowaniem domyślnym.Nie potrzebujesz do tego wyrażenia regularnego.
Dodaj apache commons lang do swojego projektu ( http://commons.apache.org/proper/commons-lang/ ), a następnie użyj:
źródło
źródło
Jest w tym prosty prosty linijka:
Jeśli opcjonalna grupa dopasowywania będzie opcjonalna, będzie to również uwzględniać cytaty, których nie można znaleźć, zwracając w tym przypadku spację.
Zobacz demo na żywo .
źródło
Ponieważ zaznaczyłeś także Scalę, rozwiązanie bez wyrażenia regularnego, które łatwo radzi sobie z wieloma cytowanymi ciągami:
źródło
.split('\'').get(2)
lub coś w tym zakresie w Javie? Myślę, że możesz potrzebować skanu mózgu, jeśli uważasz, że to czytelne rozwiązanie - wygląda na to, że ktoś próbował mi zrobić golfa.źródło
jak w javascript:
rzeczywiste wyrażenie regularne to:
/'([^']+)'/
jeśli używasz nie chciwego modyfikatora (jak w innym poście), wygląda to tak:
to jest czystsze.
źródło
W Scali
źródło
String dataIWant = mydata.split("'")[1];
Zobacz prezentację na żywo
źródło
Apache Commons Lang udostępnia wiele narzędzi pomocniczych dla interfejsu API java.lang, w szczególności metod manipulacji ciągami. W twoim przypadku początkowe i końcowe podciągi są takie same, więc po prostu wywołaj następującą funkcję.
Jeśli początkowe i końcowe podciągi są różne, użyj następującej metody przeciążenia.
Jeśli chcesz wszystkie wystąpienia pasujących podciągów, użyj:
Na przykład, aby uzyskać wszystkie wystąpienia pasującego podciągu
źródło
możesz użyć tego używam pętli while do przechowywania wszystkich pasujących podciągów w tablicy, jeśli używasz
if (matcher.find()) { System.out.println(matcher.group(1)); }
dostaniesz podłańcuch dopasowań, dzięki czemu możesz użyć tego, aby uzyskać podłańcuch wszystkich dopasowań
źródło
dodaj zależność apache.commons od pom.xml
I poniżej działa kod.
źródło
Trochę jak grupa (1) nie działała dla mnie. Użyłem grupy (0), aby znaleźć wersję adresu URL.
źródło