ant - tokenise reeks in substrings met behulp van regex

Ik heb een invoerreeks van het formaat abc; def; ghi; jkl; ........ en zo verder. de kleinste toegestane invoerreeks is abc , terwijl er geen limiet is voor het maximumaantal tokens. Ook is de lengte van elk token NIET vastgesteld op 3. het kan een willekeurig aantal karakters zijn.

voor bijvoorbeeld amerika; rusland; uae is ook een geaccepteerde invoer

Ik wil de eerste drie tokens uitschakelen en er afzonderlijke eigenschappen van maken. In het geval dat er minder dan 3 zijn, moeten die respectieve tokens NULL zijn.

Tot nu toe heb ik veel reguliere expressies geprobeerd (waar ik me niet comfortabel bij voel)

${testprop} contains the input string.

ik gebruik het volgende commando

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

maar het werkt niet. alle suggesties voor een betere regex !!

0
Boven regex komt overeen met elke reeks met minder dan 3 tekens. Je kunt het hier bekijken regex101.com/r/kW3vA5
toegevoegd de auteur om39a, de bron
Boven regex komt overeen met elke reeks met minder dan 3 tekens. Je kunt het hier bekijken regex101.com/r/kW3vA5
toegevoegd de auteur om39a, de bron
Boven regex komt overeen met elke reeks met minder dan 3 tekens. Je kunt het hier bekijken regex101.com/r/kW3vA5
toegevoegd de auteur om39a, de bron
/(? i) \ b ([\ w] {1,2} (? =;))/ Probeer deze regex
toegevoegd de auteur om39a, de bron
Het spijt me, ik had duidelijk moeten maken dat de tokens elk willekeurig aantal karakters kunnen zijn en niet beperkt zijn tot 3.
toegevoegd de auteur user1856732, de bron
Het spijt me, ik had duidelijk moeten maken dat de tokens elk willekeurig aantal karakters kunnen zijn en niet beperkt zijn tot 3.
toegevoegd de auteur user1856732, de bron
Het spijt me, ik had duidelijk moeten maken dat de tokens elk willekeurig aantal karakters kunnen zijn en niet beperkt zijn tot 3.
toegevoegd de auteur user1856732, de bron
om39a: bedankt maar sorry. het komt niet overeen met de invoer.
toegevoegd de auteur user1856732, de bron
om39a: bedankt maar sorry. het komt niet overeen met de invoer.
toegevoegd de auteur user1856732, de bron
om39a: bedankt maar sorry. het komt niet overeen met de invoer.
toegevoegd de auteur user1856732, de bron

6 antwoord

Gebruik deze regex om te bezuinigen haal de eerste 3 tekens als ze bestaan.

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

Verifieer hier

Gebruik deze regex om de string te krijgen met een waarde van minder dan 3 tekens.

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

Verifieer hier

0
toegevoegd
Gewoon om te controleren welke dosis deze verklaring uit uw vraag betekent? Ik wil de eerste drie verwijderen en er afzonderlijke eigenschappen van maken. In het geval dat er minder dan 3 zijn, moeten die respectieve tokens NULL zijn.
toegevoegd de auteur om39a, de bron
het betekent dat voor een invoerreeks zoals "stringa; stringb; stringc; stringd" ik 3 eigenschappen wil creëren, zeg prop1 , prop2 en prop3 met respectievelijk waarden stringa , stringb en stringc . Als de invoerreeks echter zoiets is als "stringa; stringb" dan hebben de eigenschappen prop1 en prop2 waarden stringa en stringb terwijl prop3 de waarde NULL bevat
toegevoegd de auteur user1856732, de bron
maar er kunnen meer dan 3 tekens in een token zitten. in plaats van de testreeks die u gebruikt voor het testen van uw regex's. Probeer het volgende en kijk of u de eerste 3 tokens/groepen "stringa; stringb; stringc; stringd" hieruit kunt extraheren, probeer "stringa", " stringb "en" stringc "
toegevoegd de auteur user1856732, de bron

Gebruik deze regex om te bezuinigen haal de eerste 3 tekens als ze bestaan.

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

Verifieer hier

Gebruik deze regex om de string te krijgen met een waarde van minder dan 3 tekens.

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

Verifieer hier

0
toegevoegd
Gewoon om te controleren welke dosis deze verklaring uit uw vraag betekent? Ik wil de eerste drie verwijderen en er afzonderlijke eigenschappen van maken. In het geval dat er minder dan 3 zijn, moeten die respectieve tokens NULL zijn.
toegevoegd de auteur om39a, de bron
het betekent dat voor een invoerreeks zoals "stringa; stringb; stringc; stringd" ik 3 eigenschappen wil creëren, zeg prop1 , prop2 en prop3 met respectievelijk waarden stringa , stringb en stringc . Als de invoerreeks echter zoiets is als "stringa; stringb" dan hebben de eigenschappen prop1 en prop2 waarden stringa en stringb terwijl prop3 de waarde NULL bevat
toegevoegd de auteur user1856732, de bron
maar er kunnen meer dan 3 tekens in een token zitten. in plaats van de testreeks die u gebruikt voor het testen van uw regex's. Probeer het volgende en kijk of u de eerste 3 tokens/groepen "stringa; stringb; stringc; stringd" hieruit kunt extraheren, probeer "stringa", " stringb "en" stringc "
toegevoegd de auteur user1856732, de bron

Gebruik deze regex om te bezuinigen haal de eerste 3 tekens als ze bestaan.

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

Verifieer hier

Gebruik deze regex om de string te krijgen met een waarde van minder dan 3 tekens.

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

Verifieer hier

0
toegevoegd
Gewoon om te controleren welke dosis deze verklaring uit uw vraag betekent? Ik wil de eerste drie verwijderen en er afzonderlijke eigenschappen van maken. In het geval dat er minder dan 3 zijn, moeten die respectieve tokens NULL zijn.
toegevoegd de auteur om39a, de bron
het betekent dat voor een invoerreeks zoals "stringa; stringb; stringc; stringd" ik 3 eigenschappen wil creëren, zeg prop1 , prop2 en prop3 met respectievelijk waarden stringa , stringb en stringc . Als de invoerreeks echter zoiets is als "stringa; stringb" dan hebben de eigenschappen prop1 en prop2 waarden stringa en stringb terwijl prop3 de waarde NULL bevat
toegevoegd de auteur user1856732, de bron
maar er kunnen meer dan 3 tekens in een token zitten. in plaats van de testreeks die u gebruikt voor het testen van uw regex's. Probeer het volgende en kijk of u de eerste 3 tokens/groepen "stringa; stringb; stringc; stringd" hieruit kunt extraheren, probeer "stringa", " stringb "en" stringc "
toegevoegd de auteur user1856732, de bron

Bedankt iedereen. Ik heb eindelijk het antwoord uitgewerkt.

Gebruik de volgende regex,
([^;] +) ([] [^;] *) ([]) ([] [^;] *) ([])

we kunnen de eerste 3 tekenreeksen in de groepen 1 , 2 en 4 krijgen. Maar de groep 2 wordt geleverd met een voorgaande ; die verder verwijderd kan worden door \; (. *) toe te passen en groep te extraheren 1 .

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"

Dit geeft je de gewenste eerste drie tokens in string1, string3 en string4

string1 = russia

string3 = uae

string4 = germany

0
toegevoegd

Bedankt iedereen. Ik heb eindelijk het antwoord uitgewerkt.

Gebruik de volgende regex,
([^;] +) ([] [^;] *) ([]) ([] [^;] *) ([])

we kunnen de eerste 3 tekenreeksen in de groepen 1 , 2 en 4 krijgen. Maar de groep 2 wordt geleverd met een voorgaande ; die verder verwijderd kan worden door \; (. *) toe te passen en groep te extraheren 1 .

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"

Dit geeft je de gewenste eerste drie tokens in string1, string3 en string4

string1 = russia

string3 = uae

string4 = germany

0
toegevoegd

Bedankt iedereen. Ik heb eindelijk het antwoord uitgewerkt.

Gebruik de volgende regex,
([^;] +) ([] [^;] *) ([]) ([] [^;] *) ([])

we kunnen de eerste 3 tekenreeksen in de groepen 1 , 2 en 4 krijgen. Maar de groep 2 wordt geleverd met een voorgaande ; die verder verwijderd kan worden door \; (. *) toe te passen en groep te extraheren 1 .

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"

Dit geeft je de gewenste eerste drie tokens in string1, string3 en string4

string1 = russia

string3 = uae

string4 = germany

0
toegevoegd