完全无法理解这一点。
我有以下字符串aaa||bbb||ccc
。我想分开||
。
我有一个适用于aaa||bbb
的正则表达式(.*)\|\|(.*)
,但不适用于3个或更多值。
我需要一个工作来获得无限数量的值。
由于
编辑:抱歉忘了提及。我在Ant-Contrib库中使用Ant和PropertyRegex任务。
所以基本上只需要普通的正则表达式。
答案 0 :(得分:3)
您可以使用正则表达式在||
上拆分字符串,而不是匹配和使用捕获的组:
\|\|
答案 1 :(得分:1)
以下各种变体如何:
[^|]+(?:\|\|[^|]+)*
1 2 1
1
匹配管道以外的任何内容,2
与您的分隔符匹配?
Matches-->aaa
Matches-->aaa||bbb
Matches-->aaa||bbb||ccc
Matches-->aaa||bbb||ccc||ddd
Does not match-->aaa||
Does not match-->aaa|bbb
Does not match-->aaa|bbb|ccc
答案 2 :(得分:0)
你不能用普通的正则表达式匹配来做到这一点;相反,你需要使用某些条带的“拆分”功能。这取决于您使用的语言。例如,在Java中你可以写:
final String[] fields = "aaa||bbb||ccc".split("[|][|]", -1);
或Perl:
my @fields = split /\|\|/, 'aaa||bbb||ccc', -1;
如果您更新问题以指明您正在使用的语言,您将获得更有帮助的答案。
答案 3 :(得分:0)
以下代码将解决此问题
string x1 = "aaa||bbb||ccc";
string[] result = Regex.Split(x1, @"\|\|");
你也可以使用它
string[] parts = x1.Split(new string[] { "||" }, StringSplitOptions.None);
答案 4 :(得分:0)
您可以使用Ant Addon Flaka 中的分割功能,f.e。 :
<project name="demo" xmlns:fl="antlib:it.haefelinger.flaka">
<property name="somestring" value="aaa||bbb||ccc"/>
<fl:let>counter = 0</fl:let>
<fl:for var="substring" in="split('${somestring}','\|\|')">
<fl:let>counter = counter + 1</fl:let>
<!-- simple echo -->
<fl:echo>substring #{counter} => #{substring}</fl:echo>
<!-- create properties for further processing -->
<fl:let>substring#{counter} := '#{substring}'</fl:let>
</fl:for>
<echo>
$${substring1} => ${substring1}
$${substring2} => ${substring2}
$${substring3} => ${substring3}
</echo>
</project>
输出:
Buildfile: /home/rosebud/AntTest/tryme.xml
[fl:echo] substring 1 => aaa
[fl:echo] substring 2 => bbb
[fl:echo] substring 3 => ccc
[echo] ${substring1} => aaa
[echo] ${substring2} => bbb
[echo] ${substring3} => ccc