2016-04-19 8 views
2

Ich benutze Nintex Workflows mit einer RegEx-Aktion. Ich glaube, dass RegEx auf .NET basiert. Ich muss eine RegEx für einige Daten durchführen, die mir von Benutzern gesendet werden, die es in einem anderen Format eingeben, basierend auf der Person, die die Daten schreibt.RegEx zum Teilen und Extrahieren basierend strenge Anforderung

Test: A-BC12 (1,2,3,4,5,6,7,8,9); 
Test: A-DE34 (1,2,3,4, words, 5,6,7,8,9); 
Test: AFG56 (1,2,3,4 word, 5); 
STOP some extra 

Mein Ziel ist dies.

Start the extract after Test: 
Capture the last 4 of the alpha numeric before the parenthesis 
Capture the numbers only inside the parenthesis  
Split each data based on ; 
End the whole capture when the word STOP is found. 

Endergebnissen

BC12 (1,2,3,4,5,6,7,8,9); 
DE34 (1,2,3,4,5,6,7,8,9); 
FG56 (1,2,3,4,5); 

habe ich versucht, die Daten, Forward-Lookup Aufspalten und ausschließen und ich kann nicht scheinen, um alles zusammen zu arbeiten. Wenn ich mehrere RegEx ausführen muss, um meine Ergebnisse zu erzielen, bin ich damit einverstanden.

Ich habe versucht, die folgendes zu erreichen jedes meiner Ziele (?s)(?<=^.*?Test:\s)[a-zA-Z0-9]+ dies nur erfassen die erste ABC12 oder ABC12 stoppt dann [,;] die Daten geteilt, so dass es leichter zu pflegen ist. Das Wort Test wird jedoch erfasst.

Ich fühle, dass ich in die richtige Richtung gehe, jedoch vermisse ich etwas oder nehme den falschen Ansatz. Jede Hilfe würde sehr geschätzt werden.

Antwort

2

Wenn Sie die erste Gruppe weglassen müssen, können Sie diese Regex verwenden: Test:\s*A[^;]*;(.*?)STOP.

Auf diese Weise können Sie $1 nehmen und auf ; teilen.


Bearbeiten: Erläuterungen haben die obige Lösung obsolet gemacht. Ich habe neue Sachen gemacht, die Ihre Schritte direkt ansprechen wird:

a. Start the extract after Test: 
b. Capture the last 4 of the alpha numeric before the parenthesis 
c. Capture the numbers only inside the parenthesis  
d. Split each data based on ; 
e. End the whole capture when the word STOP is found. 

Sie suchen tatsächlich so etwas wie:

  1. Verwendung Test:\s*(.*?)STOP. Dies adressiert die Schritte a und e.

  2. Nehmen Sie $1 und verwenden Sie [A-Z0-9]{4}\s*\(([^)]*)\);. Dies adressiert die Schritte b und d.

  3. Nehmen Sie die $1 aus dem vorherigen Schritt, und verwenden Sie ([0-9]+), um die Zahlen zu erhalten. Dies wird alle Zahlen erhalten, und wenn gegeben: 9,10 wird es zwei Übereinstimmungen erzeugen: 9 und 10.

Sie müssen möglicherweise Modifikatoren verwenden, wie i für Groß- und Kleinschreibung, s für einzeilige und g für global.

Ich hoffe, das ist endlich was du suchst!

+0

Dies funktioniert nicht für mich. Das Capture überspringt den 'Test:' und den ersten Eintrag und fängt dann alles von diesem Punkt aus sogar die Wörter ein, die in den Klammern enthalten sind. Die Optionen, die ich für die RegEx habe, sind 'Replace Text',' Split' und 'Extract'.Die einzige Option, die ich einfügen muss, ist die Option "Text ersetzen". – JeremyA1

+0

@ JeremyA1 Bitte geben Sie an, was Sie wollen. Nirgends hast du etwas über den Inhalt der Klammer gesagt. – Laurel

+0

Ich habe meinen ursprünglichen Beitrag aktualisiert, um zu reflektieren, was ich zu erreichen versuche. Ich entschuldige mich dafür, dass ich den Teil über die Klammer weggelassen habe. – JeremyA1

Verwandte Themen