正则表达式与管道分裂字符串

时间:2011-12-16 03:10:39

标签: regex ant

完全无法理解这一点。

我有以下字符串aaa||bbb||ccc。我想分开||

我有一个适用于aaa||bbb的正则表达式(.*)\|\|(.*),但不适用于3个或更多值。

我需要一个工作来获得无限数量的值。

由于

编辑:抱歉忘了提及。我在Ant-Contrib库中使用Ant和PropertyRegex任务。

所以基本上只需要普通的正则表达式。

5 个答案:

答案 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