ant - regexを使用して文字列を部分文字列にトークン化する

私は abc; def; ghi; jkl; ........ という形式の入力文字列を持っています。許容される最小の入力文字列は abc ですが、トークンの最大数に制限はありません。また、各トークンの長さは3に固定されていません。任意の数の文字にすることができます。

たとえば、 america; russia; uae などの入力も受け入れられます

私は、最初の3つのトークンを取り出し、それらの中から別々の特性を作りたいと思います。 3未満の場合、それぞれのトークンは NULL でなければなりません。

これまで私は多くの正規表現を試しました(これは私が快適ではありません)

${testprop} contains the input string.

私は次のコマンドを使用しています

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

それは動作していません。より良い正規表現のための任意の提案!

0
上の正規表現は3文字未満の文字列と一致します。こちらをご覧ください。 regex101.com/r/kW3vA5
追加された 著者 om39a,
上の正規表現は3文字未満の文字列と一致します。こちらをご覧ください。 regex101.com/r/kW3vA5
追加された 著者 om39a,
上の正規表現は3文字未満の文字列と一致します。こちらをご覧ください。 regex101.com/r/kW3vA5
追加された 著者 om39a,
/(?i)\ b([\ w] {1,2}(?=;))/ この正規表現を試してください
追加された 著者 om39a,
私は申し訳ありませんが、私はトークンは任意の数の文字とすることができ、3に制限されていないことを明確にしておくべきです。
追加された 著者 user1856732,
私は申し訳ありませんが、私はトークンは任意の数の文字とすることができ、3に制限されていないことを明確にしておくべきです。
追加された 著者 user1856732,
私は申し訳ありませんが、私はトークンは任意の数の文字とすることができ、3に制限されていないことを明確にしておくべきです。
追加された 著者 user1856732,
om39a:ありがとう、申し訳ありません。それは入力と一致しません。
追加された 著者 user1856732,
om39a:ありがとう、申し訳ありません。それは入力と一致しません。
追加された 著者 user1856732,
om39a:ありがとう、申し訳ありません。それは入力と一致しません。
追加された 著者 user1856732,

6 答え

この正規表現を使用して、最初の3文字があればそれを切り捨てます。

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

こちらで確認してください

この正規表現を使用して、値が3文字未満の文字列を取得します。

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

ここで確認

0
追加された
あなたの質問からこの声明が何を意味するのかを確認するだけですか? 最初の3つを取り出して、別々のプロパティを作りたいと思います。 3未満の場合、それぞれのトークンはNULLにする必要があります。
追加された 著者 om39a,
prop1prop2 という3つのプロパティを作成したいと思っています。 stringastringbstringc の値を持つ prop3 しかし、入力文字列が "stringa; stringb" のようなものであれば、 prop1prop2 prop3 には NULL という値が含まれていますが、 stringb
追加された 著者 user1856732,
トークンには3文字以上が存在する可能性があります。あなたの正規表現をテストするために使用しているテスト文字列の代わりに、以下を使用して、最初の3つのトークン/グループ "stringa; stringb; stringc; stringd"を抽出できるかどうかを確認し、 "stringa"、 " 「stringb」および「stringc」
追加された 著者 user1856732,

この正規表現を使用して、最初の3文字があればそれを切り捨てます。

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

こちらで確認してください

この正規表現を使用して、値が3文字未満の文字列を取得します。

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

ここで確認

0
追加された
あなたの質問からこの声明が何を意味するのかを確認するだけですか? 最初の3つを取り出して、別々のプロパティを作りたいと思います。 3未満の場合、それぞれのトークンはNULLにする必要があります。
追加された 著者 om39a,
prop1prop2 という3つのプロパティを作成したいと思っています。 stringastringbstringc の値を持つ prop3 しかし、入力文字列が "stringa; stringb" のようなものであれば、 prop1prop2 prop3 には NULL という値が含まれていますが、 stringb
追加された 著者 user1856732,
トークンには3文字以上が存在する可能性があります。あなたの正規表現をテストするために使用しているテスト文字列の代わりに、以下を使用して、最初の3つのトークン/グループ "stringa; stringb; stringc; stringd"を抽出できるかどうかを確認し、 "stringa"、 " 「stringb」および「stringc」
追加された 著者 user1856732,

この正規表現を使用して、最初の3文字があればそれを切り捨てます。

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

こちらで確認してください

この正規表現を使用して、値が3文字未満の文字列を取得します。

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

ここで確認

0
追加された
あなたの質問からこの声明が何を意味するのかを確認するだけですか? 最初の3つを取り出して、別々のプロパティを作りたいと思います。 3未満の場合、それぞれのトークンはNULLにする必要があります。
追加された 著者 om39a,
prop1prop2 という3つのプロパティを作成したいと思っています。 stringastringbstringc の値を持つ prop3 しかし、入力文字列が "stringa; stringb" のようなものであれば、 prop1prop2 prop3 には NULL という値が含まれていますが、 stringb
追加された 著者 user1856732,
トークンには3文字以上が存在する可能性があります。あなたの正規表現をテストするために使用しているテスト文字列の代わりに、以下を使用して、最初の3つのトークン/グループ "stringa; stringb; stringc; stringd"を抽出できるかどうかを確認し、 "stringa"、 " 「stringb」および「stringc」
追加された 著者 user1856732,

みんな、ありがとう。私は最終的に答えを出しました。

次の正規表現を使用する
([;;] +)([;])?)([;]?)([;]?[^;] *)([;]?)

124 の各グループで最初の3つの文字列トークンを取得できます。しかし、グループ 2 には、 \;(。*)を適用してグループ 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"

これにより、string1、string3、およびstring4の最初の3つのトークンが得られます

string1 = russia

string3 = uae

string4 =ドイツ語

0
追加された

みんな、ありがとう。私は最終的に答えを出しました。

次の正規表現を使用する
([;;] +)([;])?)([;]?)([;]?[^;] *)([;]?)

124 の各グループで最初の3つの文字列トークンを取得できます。しかし、グループ 2 には、 \;(。*)を適用してグループ 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"

これにより、string1、string3、およびstring4の最初の3つのトークンが得られます

string1 = russia

string3 = uae

string4 =ドイツ語

0
追加された

みんな、ありがとう。私は最終的に答えを出しました。

次の正規表現を使用する
([;;] +)([;])?)([;]?)([;]?[^;] *)([;]?)

124 の各グループで最初の3つの文字列トークンを取得できます。しかし、グループ 2 には、 \;(。*)を適用してグループ 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"

これにより、string1、string3、およびstring4の最初の3つのトークンが得られます

string1 = russia

string3 = uae

string4 =ドイツ語

0
追加された