Ant - Tokenise Zeichenkette in Teilstrings mit Regex

Ich habe eine Eingabezeichenfolge des Formats abc; def; ghi; jkl; ........ und so weiter. Die kleinste zulässige Eingabezeichenfolge ist abc , während die maximale Anzahl der Token nicht begrenzt ist. Auch die Länge jedes Tokens ist NICHT auf 3 festgelegt. Es kann eine beliebige Anzahl von Zeichen sein.

zB ist america; russia; vae auch eine akzeptierte Eingabe

Ich möchte die ersten drei Tokens herausnehmen und daraus getrennte Eigenschaften machen. Falls es weniger als 3 gibt, sollten diese jeweiligen Token NULL sein.

Bisher habe ich viele reguläre Ausdrücke ausprobiert (mit denen ich mich nicht wohl fühle)

${testprop} contains the input string.

Ich verwende den folgenden Befehl

properenrex Eigenschaft = "testprop1" input = "$ {testprop}" regexp = "(. *) (\;. *) * /" select = "\ 1"

aber es funktioniert nicht. irgendwelche Vorschläge für eine bessere Regex !!

0
Über Regex wird jeder String mit weniger als 3 Zeichen übereinstimmen. Sie können es hier überprüfen regex101.com/r/kW3vA5
hinzugefügt der Autor om39a, Quelle
Über Regex wird jeder String mit weniger als 3 Zeichen übereinstimmen. Sie können es hier überprüfen regex101.com/r/kW3vA5
hinzugefügt der Autor om39a, Quelle
Über Regex wird jeder String mit weniger als 3 Zeichen übereinstimmen. Sie können es hier überprüfen regex101.com/r/kW3vA5
hinzugefügt der Autor om39a, Quelle
/(? i) \ b ([\ w] {1,2} (? =;))/ Versuchen Sie diese Regex
hinzugefügt der Autor om39a, Quelle
Es tut mir leid, ich hätte klarstellen sollen, dass die Token beliebig viele Zeichen haben können und nicht auf 3 beschränkt sind.
hinzugefügt der Autor user1856732, Quelle
Es tut mir leid, ich hätte klarstellen sollen, dass die Token beliebig viele Zeichen haben können und nicht auf 3 beschränkt sind.
hinzugefügt der Autor user1856732, Quelle
Es tut mir leid, ich hätte klarstellen sollen, dass die Token beliebig viele Zeichen haben können und nicht auf 3 beschränkt sind.
hinzugefügt der Autor user1856732, Quelle
om39a: danke aber tut mir leid. Es stimmt nicht mit der Eingabe überein.
hinzugefügt der Autor user1856732, Quelle
om39a: danke aber tut mir leid. Es stimmt nicht mit der Eingabe überein.
hinzugefügt der Autor user1856732, Quelle
om39a: danke aber tut mir leid. Es stimmt nicht mit der Eingabe überein.
hinzugefügt der Autor user1856732, Quelle

6 Antworten

Benutze diese Regex, um die ersten 3 Zeichen zu erhalten, falls sie existieren.

/(? i) \ b ([\ w] {3} (? = [\ w] *;))/

Hier bestätigen

Verwenden Sie diese Regex, um die Zeichenfolge abzurufen, deren Wert weniger als 3 Zeichen beträgt.

/(? i) \ b ([\ w] {1,2} (? =;))/

Hier bestätigen

0
hinzugefügt
Nur um zu überprüfen, welche Dosis diese Aussage aus Ihrer Frage bedeutet? Ich möchte die ersten drei herausnehmen und separate Eigenschaften daraus machen. Falls es weniger als 3 gibt, sollten diese jeweiligen Token NULL sein.
hinzugefügt der Autor om39a, Quelle
Das bedeutet, dass für eine Eingabezeichenfolge wie "stringa; stringb; stringc; stringd" ich 3 Eigenschaften erstellen möchte, sagen wir prop1 , prop2 und prop3 mit den Werten stringa , stringb bzw. stringc . Wenn die Eingabezeichenfolge jedoch etwas wie "stringa; stringb" ist, haben die Eigenschaften prop1 und prop2 Werte stringa und stringb , während prop3 den Wert NULL enthält
hinzugefügt der Autor user1856732, Quelle
aber es kann mehr als 3 Zeichen in einem Token geben. anstelle der Testzeichenfolge, die Sie zum Testen Ihrer Regex verwenden .. versuchen Sie, mit den folgenden und sehen, wenn Sie die ersten 3 Token/Gruppen "strikea; stringb; stringc; stringd" daraus extrahieren können, versuchen Sie, "strikea", " stringb "und" stringc "
hinzugefügt der Autor user1856732, Quelle

Benutze diese Regex, um die ersten 3 Zeichen zu erhalten, falls sie existieren.

/(? i) \ b ([\ w] {3} (? = [\ w] *;))/

Hier bestätigen

Verwenden Sie diese Regex, um die Zeichenfolge abzurufen, deren Wert weniger als 3 Zeichen beträgt.

/(? i) \ b ([\ w] {1,2} (? =;))/

Hier bestätigen

0
hinzugefügt
Nur um zu überprüfen, welche Dosis diese Aussage aus Ihrer Frage bedeutet? Ich möchte die ersten drei herausnehmen und separate Eigenschaften daraus machen. Falls es weniger als 3 gibt, sollten diese jeweiligen Token NULL sein.
hinzugefügt der Autor om39a, Quelle
Das bedeutet, dass für eine Eingabezeichenfolge wie "stringa; stringb; stringc; stringd" ich 3 Eigenschaften erstellen möchte, sagen wir prop1 , prop2 und prop3 mit den Werten stringa , stringb bzw. stringc . Wenn die Eingabezeichenfolge jedoch etwas wie "stringa; stringb" ist, haben die Eigenschaften prop1 und prop2 Werte stringa und stringb , während prop3 den Wert NULL enthält
hinzugefügt der Autor user1856732, Quelle
aber es kann mehr als 3 Zeichen in einem Token geben. anstelle der Testzeichenfolge, die Sie zum Testen Ihrer Regex verwenden .. versuchen Sie, mit den folgenden und sehen, wenn Sie die ersten 3 Token/Gruppen "strikea; stringb; stringc; stringd" daraus extrahieren können, versuchen Sie, "strikea", " stringb "und" stringc "
hinzugefügt der Autor user1856732, Quelle

Benutze diese Regex, um die ersten 3 Zeichen zu erhalten, falls sie existieren.

/(? i) \ b ([\ w] {3} (? = [\ w] *;))/

Hier bestätigen

Verwenden Sie diese Regex, um die Zeichenfolge abzurufen, deren Wert weniger als 3 Zeichen beträgt.

/(? i) \ b ([\ w] {1,2} (? =;))/

Hier bestätigen

0
hinzugefügt
Nur um zu überprüfen, welche Dosis diese Aussage aus Ihrer Frage bedeutet? Ich möchte die ersten drei herausnehmen und separate Eigenschaften daraus machen. Falls es weniger als 3 gibt, sollten diese jeweiligen Token NULL sein.
hinzugefügt der Autor om39a, Quelle
Das bedeutet, dass für eine Eingabezeichenfolge wie "stringa; stringb; stringc; stringd" ich 3 Eigenschaften erstellen möchte, sagen wir prop1 , prop2 und prop3 mit den Werten stringa , stringb bzw. stringc . Wenn die Eingabezeichenfolge jedoch etwas wie "stringa; stringb" ist, haben die Eigenschaften prop1 und prop2 Werte stringa und stringb , während prop3 den Wert NULL enthält
hinzugefügt der Autor user1856732, Quelle
aber es kann mehr als 3 Zeichen in einem Token geben. anstelle der Testzeichenfolge, die Sie zum Testen Ihrer Regex verwenden .. versuchen Sie, mit den folgenden und sehen, wenn Sie die ersten 3 Token/Gruppen "strikea; stringb; stringc; stringd" daraus extrahieren können, versuchen Sie, "strikea", " stringb "und" stringc "
hinzugefügt der Autor user1856732, Quelle

Danke an alle. Ich habe schließlich die Antwort ausgearbeitet.

Using the following regex,
([^;]+)([;]?[^;]*)([;]?)([;]?[^;]*)([;]?)

Wir können die ersten 3 Zeichenketten in den Gruppen 1 , 2 und 4 erhalten. Aber die Gruppe 2 enthält einen vorangestellten ; , der durch Anwenden von \; (. *) und Extrahieren der Gruppe 1 weiter entfernt werden kann

property name="inputString" value="russia;uae;germany;africa;"

propertyregex property="string1" input="${inputString}" regexp="([^;]+)([;]?[^;]*)([;]?)([;]?[^;]*)([;]?)" select="\1"

propertyregex property="string2" input="${inputString}" regexp="([^;]+)([;]?[^;]*)([;]?)([;]?[^;]*)([;]?)" select="\2"

propertyregex property="string3" input="${string2}" regexp="\;(.*)" select="\1"

propertyregex property="string4" input="${inputString}" regexp="([^;]+)([;]?[^;]*)([;]?)([;]?[^;]*)([;]?)" select="\4"

Dies gibt Ihnen die gewünschten ersten drei Tokens in string1, string3 und string4

string1 = russia

string3 = uae

string4 = Deutschland

0
hinzugefügt

Danke an alle. Ich habe schließlich die Antwort ausgearbeitet.

Using the following regex,
([^;]+)([;]?[^;]*)([;]?)([;]?[^;]*)([;]?)

Wir können die ersten 3 Zeichenketten in den Gruppen 1 , 2 und 4 erhalten. Aber die Gruppe 2 enthält einen vorangestellten ; , der durch Anwenden von \; (. *) und Extrahieren der Gruppe 1 weiter entfernt werden kann

property name="inputString" value="russia;uae;germany;africa;"

propertyregex property="string1" input="${inputString}" regexp="([^;]+)([;]?[^;]*)([;]?)([;]?[^;]*)([;]?)" select="\1"

propertyregex property="string2" input="${inputString}" regexp="([^;]+)([;]?[^;]*)([;]?)([;]?[^;]*)([;]?)" select="\2"

propertyregex property="string3" input="${string2}" regexp="\;(.*)" select="\1"

propertyregex property="string4" input="${inputString}" regexp="([^;]+)([;]?[^;]*)([;]?)([;]?[^;]*)([;]?)" select="\4"

Dies gibt Ihnen die gewünschten ersten drei Tokens in string1, string3 und string4

string1 = russia

string3 = uae

string4 = Deutschland

0
hinzugefügt

Danke an alle. Ich habe schließlich die Antwort ausgearbeitet.

Using the following regex,
([^;]+)([;]?[^;]*)([;]?)([;]?[^;]*)([;]?)

Wir können die ersten 3 Zeichenketten in den Gruppen 1 , 2 und 4 erhalten. Aber die Gruppe 2 enthält einen vorangestellten ; , der durch Anwenden von \; (. *) und Extrahieren der Gruppe 1 weiter entfernt werden kann

property name="inputString" value="russia;uae;germany;africa;"

propertyregex property="string1" input="${inputString}" regexp="([^;]+)([;]?[^;]*)([;]?)([;]?[^;]*)([;]?)" select="\1"

propertyregex property="string2" input="${inputString}" regexp="([^;]+)([;]?[^;]*)([;]?)([;]?[^;]*)([;]?)" select="\2"

propertyregex property="string3" input="${string2}" regexp="\;(.*)" select="\1"

propertyregex property="string4" input="${inputString}" regexp="([^;]+)([;]?[^;]*)([;]?)([;]?[^;]*)([;]?)" select="\4"

Dies gibt Ihnen die gewünschten ersten drei Tokens in string1, string3 und string4

string1 = russia

string3 = uae

string4 = Deutschland

0
hinzugefügt