Rolf B: Regex: zweites Wort ohne Leerzeichen

Beitrag lesen

Hallo Andinho,

die Sequenz (!Haltestelle ) ist ein negativer Lookahead, damit matcht die Regex einen beliebigen String (.*), der nicht mit "Haltestelle" beginnt. Das ist ab Position 2 der Fall: altestelle.

Mit Lookaheads kommst Du deshalb nicht weiter. Was Dir helfen könnte, wäre ein Blick in die entgegengesetzte Richtung: ein positiver Lookbehind (?<=Haltestelle ), der wird aber nicht von allen Regex-Engines unterstützt.

Wenn doch:

(?<=Haltestelle ).*(?= \(wird bearbeitet\))

Das würde auch für Haltestelle Porta Westfalica (wird bearbeitet) funktionieren. Oder Soest (Westf.)

Beachte die Spaces in Lookbehind und Lookahead, damit Du das Leerzeichen nicht im Match hast. Was nicht funktioniert, ist

Haltestelle  München   (wird bearbeitet)

Auch mit einem \s+ in den Lookbehind/Lookahead nimmt er nur eine Leerstelle weg.

Um mehrfache Leerstellen wegzubekommen, müsste man das Ganze direkt angehen, das würde aber voraussetzen, dass Du auf matched groups zugreifen kannst. Der Ausdruck

/Haltestelle\s+(?<name>.*)\s+\(wird bearbeitet\)/

liest sich besser und ist auch - meine ich - performanter als diese Lookarounds, aber du musst dann eben auf Groups zugreifen können. In JavaScript sähe das so aus:

let haltestelle = "Haltestelle Dingenskirchen (wird bearbeitet)";

let rx = /Haltestelle\s+(?<name>.*)\s+\(wird bearbeitet\)/;
let match = rx.exec(haltestelle);

console.log("Finde Haltestelle " + match.groups.name);

Rolf

--
sumpsi - posui - clusi