2017-05-03 7 views
2

Ich habe ein Problem mit meiner Regex-Zeichenfolge. Ich habe zwei Kombinationen von Zeichenketten wie folgtRegex passen zwei Wörter oder mindestens eine

2.3.8.2.2.1.2.3.4.12345 = WORDS: "String to capture" 
2.3.8.2.2.1.2.3.4.12345 = "" 

Regex:

1\.2\.3\.4\.(\d+) = WORDS: (?|"([^"]*)|([^:]*)) 

https://regex101.com/r/kQ3wT5/10 - passend

https://regex101.com/r/kQ3wT5/9 - Nicht

Diese Regex übereinstimmt, wird nur für die erste String-Matching und nicht für die zweite, wo ich leere Zeichenfolge habe. Die Regex muss also in beiden Szenarien übereinstimmen. Und noch etwas, das ich wirklich nicht mit "globalem" Match gehen möchte.

Bitte helfen Sie mir dabei.

+1

Sie müssen [make '(?: WORDS:)?' Optional] (https://regex101.com/r/xl5VOT/1) eingeben. –

+0

Zeigen Sie alle möglichen Zeichenfolgen an, denen Sie begegnen werden? Was soll dann mit '[^:] *' zusammenpassen? Btw, '(? |" ([^ "] *) | ([^:] *))' Wird _nothing_ entsprechen, wenn ihm die Chance gegeben wird. Und 'ich will wirklich nicht mit" globalem "Match gehen, bezieht sich hier nicht, es sei denn, Sie haben eine einzelne Schnur mit allen Ihren Daten darin. – sln

+0

@ WiktorStribiżew Vielen Dank. Bitte stellen Sie das im Antwortabschnitt, damit ich es annehmen kann. – Raja

Antwort

1

Sie benötigen WORDS:<space> optional indem sie sie mit einer optional Nicht-Erfassungsgruppe machen umschließenden:

1\.2\.3\.4\.(\d+) = (?:WORDS:)?(?|"([^"]*)|([^:]*)) 

die regex demo See.

Die (?:WORDS:)? entspricht 1 oder 0 Sequenzen (aufgrund der ? Quantifizierer) von WORDS: Teilzeichenfolge gefolgt von einem Leerzeichen.

Verwandte Themen