2016-07-21 9 views
1

Ich versuche, zwei Gruppen in einem Ausdruck zu entsprechen, jede Gruppe stellt einen einzelnen Buchstaben in Initialen als Teil eines Namens, zum Beispiel in George RR Martin der ersten Gruppe entspricht die erste R und die zweite Gruppe würde die zweite R passen, ich habe so etwas wie dies:Regex für übereinstimmende Gruppen, aber eine bestimmte Kombination von Gruppen ausgeschlossen

\b([a-zA-Z])[\.{0,1} {0,1}]{1,2}([a-zA-Z])\b

aber ich möchte eine bestimmte Kombination dieser Gruppen auszuschließen, sagen, wenn die ersten Gruppenspiele der Buchstabe d und die zweite Gruppe stimmen mit dem Buchstaben r überein.

Ist das möglich?

+0

Ja, was regex Geschmack? Könnten Sie auch die Beispieltexte und die erwartete Ausgabe hinzufügen? Bitte teilen Sie den Code. Ihre Regex ist nicht korrekt, da limitierende Quantifizierer innerhalb einer Zeichenklasse platziert werden. –

+0

Das ist Solrs Regex, wahrscheinlich mit Java –

+1

Ok, probiere ['\ b (?! [DD] \.?? [RR] \ b) ([a-zA-Z]) \.? ? ([a-zA-Z]) \ b'] (https://regex101.com/r/mW8lV6/2). Oder ['(? I) \ b (?! D \.?? R \ b) ([a-z]) \.? ? ([a-z]) \ b'] (https://regex101.com/r/mW8lV6/3). –

Antwort

1

Sie können Übereinstimmungen mit einem negativen Look-Ahead einschränken:

\b(?![dD]\.? ?[rR]\b)([a-zA-Z])\.? ?([a-zA-Z])\b 
    ^^^^^^^^^^^^^^^^^^^ 

den See regex demo

Hinweis:

  • Der (?![dD]\.? ?[rR]\b) Look-Ahead besser nach dem Wortgrenze platziert werden soll, so dass die Die Prüfung wird nur ausgelöst, wenn eine Wortgrenze auftritt, und nicht an jeder Stelle in der Zeichenfolge
  • Der Look-Ahead ist negativ, schlägt es das Spiel, wenn das Muster in ihm den Text übereinstimmt
  • Sie paßt: ein d oder D mit [dD], dann einem optional wörtlichen Punkt mit \.?, einen optionalen Raum mit ?, ein r oder R mit [rR] und einer abschließenden Wortgrenze \b.

Das Hauptmuster ist ein allgemeineres Muster - \b([a-zA-Z])\.? ?([a-zA-Z]):

  • \b - führende Wortgrenze
  • (?![dD]\.? ?[rR]\b) - die negative Vorschau
  • ([a-zA-Z]) - Gruppe 1 Erfassen eines ASCII Brief
  • \.? - ein optionaler Punkt
  • ? - ein optionaler Raum
  • ([a-zA-Z]) - Gruppe 2 einen ASCII-Buchstaben
  • \b Erfassung - ein abschließendes Wortgrenze