ant - 使用正则表达式将字符串标记为子字符串

时间:2012-12-28 04:57:02

标签: regex string ant split tokenize

我有一个格式为abc;def;ghi;jkl;........的输入字符串,依此类推。允许的最小输入字符串为abc,而最大令牌数没有限制。此外,每个令牌的长度不固定为3.它可以是任意数量的字符。

例如,america;russia;uae也是可接受的输入

我想取出前三个令牌并从中制作单独的属性。如果小于3,则相应的令牌应为NULL

到目前为止,我已经尝试了很多正则表达式(我不习惯)

${testprop}包含输入字符串。

我正在使用以下命令

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

但它不起作用。有关更好的正则表达式的任何建议!!

2 个答案:

答案 0 :(得分:0)

使用此正则表达式减少前3个字符(如果存在)。

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

Verify Here

使用此正则表达式获取值小于3个字符的字符串。

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

Verify Here

答案 1 :(得分: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

中所需的前三个标记

string1 = russia

string3 = uae

string4 = germany