regulärer Ausdruck zum durchsuchen eines Strings verwenden

osix

Bekanntes Mitglied
Moin Leute,

ich hab eine Textdatei, die aus Zeilen besteht, da suche ich das Wort "von" das mehrmals pro Zeile auftreten kann.

"von 231" und "von 1.564" und "von 1" soll gefunden werden, und die Zahl brauche ich als Integer. (US Zahl, deswegen Tausender mit Punkt)

"von meinem Großvater" und "von Luise" oder "von" ist natürlich nicht relevant, kann aber vorkommen.

Ich würde das gerne mit einer Regexp machen, aber ich weiß nicht, ob das überhaupt so geht.

Notfalls könnte ich halt mit der Regexp die Stelle des Vorkommens finden, und dann "umständlich" die Zahl rausschneiden und umwandeln.

Wenn das aber nur so geht, dann brauch ich noch zusätzlich 'nen Tipp wie ich US-Zahlen mit Punkt in einen Integer ohne Punkt umwandeln kann.

Danke schonmal im Vorraus.
 
Also etwas wie von\s+([0-9.]+)

Noch nicht ideal, da er den . alleine als Zahl nehmen würde. Und davor hat man den Anfang oder ein Whitespace und danach ein whitespace oder das Ende.

Das wäre eine Näherung.
 
US Zahl, deswegen Tausender mit Punkt
Im Amerikanischen dient der Punkt als Dezimaltrennzeichen und das Komma zur Gruppierung. Im Deutschen ist es umgekehrt. Wenn ich Dich richtig verstehe, möchtest Du 1.564 als 1564 interpretieren. Dann wäre die Zahl in deutscher Schreibweise gegeben.

Java:
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    public static void printVonNumbers(String text) throws ParseException {
        NumberFormat nf = NumberFormat.getIntegerInstance(Locale.GERMAN);
        Pattern pattern = Pattern.compile(
                "von\\s+([0-9]{4,}|(?:[0-9]{1,3}+(?:\\.[0-9]{3}+)*))");

        Matcher matcher = pattern.matcher(text);
        while (matcher.find()) {
            long number = nf.parse(matcher.group(1)).longValue();
            System.out.printf("%d%n", number);
        }
    }

    public static void main(String[] args) throws Exception {
        printVonNumbers("""
            In Deutschland gilt der Standard-Mehrwertsteuersatz
            von 19 % für die meisten Waren. Was ist die Hälfte von 42?
            Willst Du die Hälfe von meinem Kuchen? Sie erhalten
            keinen Gutschein im Wert von 1.923 Euro. Das Grundeinkommen
            geht von 1.200 bis 1.400 im Monat. Die Pandemie ging von
            2020 bis 2023
            """);
    }
}
 

Zurück
Oben