2017-08-22 2 views
0

Ich benutze regulären Ausdruck für die Analyse einiger Datensätze, und ich habe Schwierigkeiten herauszufinden, wie man den regulären Ausdruck für das Finden des folgenden Szenarios erstellt.Regulärer Ausdruck für das Finden des letzten Vorkommens einer Zeichenkette in einer Zeichenkette

Beispiel Datensatz: Dies ist eine Testzeichenfolge 425 = UA113456 jkjkj 425 = AB1234X Dies ist eine Testzeichenfolge 795 = 12 Dies ist ein Test-String.

Anforderungen. finde das Tag 795 = 12 und suche zurück, um den Wert für das Tag 425 zu finden. In diesem Fall sollte der Rückgabewert AB1235X sein. Hinweis: Es könnte mehrere 425 = Tags geben, wie in diesem Beispiel sind es zwei, aber ich brauche den Wert für das Tag, das direkt vor 795 = 12 ist.

Das ist was ich bisher habe ^. * 425 = (. *?) 795 = 12 aber nicht genau was ich brauche.

Ich würde jede Hilfe zu schätzen wissen.

+0

ich versuchte, alle vorgeschlagenen Lösungen, aber sie haben nicht funktioniert. –

+0

Ich paste die tatsächliche Zeichenfolge mit den tatsächlichen Tags. In Fall wird helfen, die Lösung zu finden .. –

+0

8 = FIX.4.4 9 = 1234 35 = 8 49 = MA 56 = CATSTFF 34 = 50 52 = 20170818-20: 26: 06.772 453 = 5 448 = captest1uk 447 = C 452 = 11 448 = Caup Research, Inc. & ihre Tochtergesellschaften 447 = D 452 = 13 448 = dlr3ukma1 447 = D 452 = 12 448 = BEARGB21XXX 447 = B 452 = 1 448 = DLR3LEI123451234 447 = N 452 = 1 761 = 4 699 = DE0001141729 662 = 101.899 663 = 1 218 = -414.300 6707 = -0.348 –

Antwort

0

Unter der Annahme, alle Tags sind Ziffern, Verwenden Sie dieses Muster (\d+)=(\S+)[^=]*795=12Demo oder Demo

(   # Capturing Group (1) 
    \d  # <digit 0-9> 
    +   # (one or more)(greedy) 
)   # End of Capturing Group (1) 
=   # "=" 
(   # Capturing Group (2) 
    \S  # <not a whitespace character> 
    +   # (one or more)(greedy) 
)   # End of Capturing Group (2) 
[^=]  # Character not in [=] Character Class 
*   # (zero or more)(greedy) 
795=12  # "795=12" 

oder auf das, was Sie versucht haben, verwenden Sie diese 425=(\S+)[^=]*795=12

+0

Vielen Dank für Ihre Zeit, aber es gab nicht den Wert, den ich erwartet hatte –

+0

@HarveyA., 'AB1235X' wird in Gruppe # 2 per Demo Link zurückgegeben ?? –

0

Dies funktioniert, wenn es Unterstützung für Lookarounds Behauptungen übernimmt:

(?<=425=)\b(\w+)\b(?=[a-zA-Z\s]*795=12) 
  • \ b (\ w +) \ b mit dem Wort
  • (? von 425 < = 425 = voran) =
  • (? = [a-zA-Z \ s] * 795 = 12), gefolgt von Zeichen und Leerstellen, gefolgt von 795 = 12
+0

Vielen Dank für Ihre Zeit, aber es gab nicht den Wert, den ich erwartet hatte –

+0

Was kam es zurück, und welchen Wert erwarteten Sie? – Anthony

+0

Ich habe einen Fehler, der einen Versuch sagt, etwas zu wiederholen, das nicht wiederholt werden kann. zum Beispiel ein * +. Übrigens benutze ich Alteryx und sein regEx-Tool dafür. –

Verwandte Themen