2017-12-15 2 views
1

Ich versuche, wie Match-Muster zu extrahieren:Regex - Erfassen einer Gruppe basierend auf einem Muster

AA/8G + 8G + 8G + 8G/OHNE *

AA/8 * G + 8 * G + 8 * G + 8 * G/mIT *

AA/8G + 8 * G + 8 * G + 8 * G/MIXED, DIESE UNTERSTÜTZTEN sind noch nicht

mit der folgende reguläre Ausdruck:

https://regex101.com/r/zemJ8H/1

aber es passt nur 8G + 8G + 8G +

weil das Muster als 8G identifiziert ** + **

Gibt es eine Möglichkeit, die letzte 8G enthalten (ohne +) in der Gruppe?

+0

Ich versuche, den Inhalt zwischen Paaren von /, wenn ein gültiges Muster gefunden wird zu extrahieren. Mit "gültiges Muster" meine ich eine Kombination von Zahlen (1 oder 2 Ziffern), gefolgt von einem Buchstaben (entweder M oder G) und einem + Symbol oder nichts (wenn es das letzte Element der Sequenz ist). Also erwarte ich 8 * G + 8 * G + 8 * G + 8 * G oder 8G + 8G + 8G + 8G in der Liste der Spiele. Ich habe versucht mit (? <= /) ([0-9] {1,2} [\ *] * [GM] [\ +] {0,1}?) \ 1+, aber das letzte Element der Sequenz ist fehlt. – Salvuccino

Antwort

0

Dieser Ausdruck kümmert sich um alle drei Fälle, einschließlich der gemischten ein:

(?<=/)([0-9]{1,2})[*]*([GM])[+]?(\1[*]*\2[+]?)+ 

Demo

Die Idee, die Erfassung von Ziffern zu trennen ist (neue \1) aus Buchstaben (die \2) und verwenden Sie beide Aufnahmen in der Wiederholungsgruppe (\1[\*]*\2[\+]?)+ am Ende des Ausdrucks.

Regex groups

+0

Gibt es Regex-Dialekte, die Backslash-Escapes von Meta-Zeichen in eckigen Klammern erfordern? Ich hätte gedacht '[*]', nicht '[\ *]' –

+0

Dies ist die erwartete Lösung! Vielen Dank! Wie kann ich es als Lösung markieren? – Salvuccino

+0

@DanFarrell Sie haben Recht, kopiere ich Teile von OP's Regex in meine Version. Rückstriche sind nicht erforderlich. Ich habe die Antwort bearbeitet und die Demo aktualisiert. Vielen Dank! – dasblinkenlight

0
AA/(8\*?G\+?)+/ 

https://regex101.com/r/zemJ8H/2

Was ist so etwas wie das? AA gefolgt von einem Plan gefolgt von einer beliebigen Anzahl von Sequenzen, die eine 8 enthalten, optional ein *, ein G und optional ein nachfolgendes +, gefolgt von einem +.

+0

To hatte keine Beispiele in der Regex 101, wenn irgendwelche anderen Zeichenfolgen übereinstimmen, aber wenn es gewünscht wird, wäre es eine einfache Sache, die 8 und G in Zeichenklassen zu ändern –

+0

Danke, aber das passt "zu viel" :) Die Lösung, nach der ich gesucht habe, ist die von dasblinkenlight zur Verfügung gestellte – Salvuccino

Verwandte Themen