2012-12-28 36 views
0

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

为如america;russia;uae也是一个公认的输入

我要拿出前三个令牌,使单独的属性了出来。如果少于3,那么这些相应的令牌应该是NULL

到目前为止,我已经尝试了很多的正则表达式(这我不舒服)

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

我使用下面的命令

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

,但它无法正常工作。任何建议更好的正则表达式!

+0

'/ \ B([\ W] {1,2}(=)?)/'尝试此正则表达式 – om39a

+0

om39a(I):谢谢但很抱歉。它不符合输入。 – user1856732

+0

以上正则表达式会匹配任何少于3个字符的字符串。你可以在这里查看http://www.regex101.com/r/kW3vA5 – om39a

回答

0

谢谢大家。我终于找出答案。

使用正则表达式如下,
([^;]+)([;]?[^;]*)([;]?)([;]?[^;]*)([;]?)

我们可以得到在组1,分别24第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所需的前三个令牌和串,4

string1 = russia

string3 = uae

string4 = germany

0

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

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

Verify Here

使用此正则表达式得到谁拥有价值少于3个字符的字符串。

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

Verify Here

+0

但是,令牌中可以有3个以上的字符。而不是用于测试您的正则表达式的测试字符串..尝试使用以下内容,看看您是否可以提取前3个标记/组 “stringa; stringb; stringc; stringd” 从此尝试提取“ stringa“,”stringb“和”stringc“ – user1856732

+0

只是为了验证您的问题的这种说法是什么意思? “我想拿出前三名,并从他们中分离出不同的属性。如果小于3,那么这些相应的标记应该为NULL。' – om39a

+0

这意味着,对于像''stringa; stringb; stringc; stringd''这样的输入字符串,我想要创建3个属性,比如'prop1', 'prop2'和'prop3'的值分别为'stringa','stringb'和'stringc'。 但是,如果输入字符串类似于“stringa; stringb”,那么属性prop1和prop2将具有值stringa和stringb而prop3包含值NULL – user1856732

相关问题