2017-11-03 2 views
0

Ich habe diese regexRegex erhalten erste Teil einer Zeichenfolge

(?<=\d\.\s).+(?=\s-\s) 

Es funktioniert großartig, wenn ich einen String haben wie

3. product - sub product 

Die Regex gibt mir das Produkt (erster Teil). Wenn ein Unterprodukt vorhanden ist, wird es durch einen Strich, der von Leerzeichen umgeben ist, vom Produkt getrennt (-).

Allerdings gibt es einige Produkte, die kein Unterprodukt haben. Zum Beispiel:

6. ComprehensiveBolt 

Die Regex sollte mir comprehensiveBolt geben, aber es gibt nichts zurück.

Welches Update muss ich an meinem Regex vornehmen, damit ich das Produkt unabhängig von der Anwesenheit oder einem anderen Produkt erhalten kann?

+0

'?' Bedeutet optional. Sie können das verwenden. –

+0

können Sie hier die vollständige Syntax angeben. Ich muss etwas falsch machen. –

+0

Es funktioniert nicht so. Sie verwenden '(? = \ S- \ s)', um das Produkt zu qualifizieren. Wenn du es _optional_ '(? = \ S- \ s) machst, wird es niemals mit der Behauptung übereinstimmen müssen, und wahrscheinlich auch nicht. Der bessere Ansatz ist die Verwendung von Grenz- oder Whitespace-Indikatoren. Du könntest versuchen '(? <= \ D \. \ S). +? (? = \ S- \ s)?' Aber du musst das '. +' '' 'Nicht gierig machen. – sln

Antwort

2

Dies ist eine Möglichkeit.
Beachten Sie, dass dies nur erforderlich ist, wenn Ihr Produkt eine Phrase sein könnte.

(?<=\d\.\s)(?:(?!\s-\s|\d\.\s).)+

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

Teil Erklärung

(?<= \d \. \s)    # This must be behind 
(?:       # ----------- 
     (?!       # Neg assertion 
      \s - \s      # Not this ahead 
     | \d \. \s      # Nor this ahead 
    ) 
     .        # Ok, grab this character 
)+       # 1 to many times 
+1

Perfekt. Arbeitete im ersten Versuch. Vielen Dank –

Verwandte Themen