2017-12-03 3 views
1

Ich versuche, den Preis von einer Zeichenfolge zu erfassen. Allerdings habe ich Schwierigkeiten, die Preisgruppe zu erfassen. Im Folgenden sind meine Beispieldaten und mein Ansatz.Regulärer Ausdruck Negative Lookbehind und Lookahead

Probe

cash $450 
012-6323735 
cash 450 
500 

Aktuelle Ansatz

Ich versuche, mit negativen Lookbehind und Look-Ahead-of "-" Zeichen

(?<!\-)(\d+)(?!\-) 

Stromausgang

enter image description here

Hat jemand eine Idee, die Preisgruppe zu erfassen?

gewünschte Ausgabe

Bargeld $ 450 (True, Capture-Gruppe 450)

012-6323735 (False)

bar 450 (True, Capture-Gruppe 450)

500 (True, Capture Group 500)

+2

Sie eine Wortgrenze und eine possessive Quantoren verwenden können: '\ b (

+1

Beachten Sie, dass der Bindestrich kein Sonderzeichen ist und nicht maskiert werden muss. –

+0

Da Motor nicht spezifiziert ist, sind Possessivquantifizierer kaum eine Lösung. – revo

Antwort

2

Wenn Sie regex mitteilen, dass der Wert vor/nach einer Ziffernfolge kein Bindestrich sein darf, verwendet die Regex-Engine gerne eine der Ziffern in einer Sequenz, um diese Anforderung zu erfüllen. Zum Beispiel heißt es, dass 01 von 2 gefolgt wird, was kein Strich ist, also 01 muss sein, was Sie erfassen möchten; offensichtlich, das ist nicht was du willst.

Ein Ansatz, dies zu beheben ist Anker \b vor und nach der Erfassungsgruppe hinzuzufügen:

(?<!\-)\b(\d+)\b(?!\-) 

Demo.

Verwandte Themen