使用管道分割字符串的正则表达式



我完全看不懂。

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

我有一个Regex为aaa||bbb工作,这是(.*)||(.*),但这并不适用于3个值或更多。

我需要一个为无限数量的值工作。

感谢

EDIT:抱歉忘了说。我正在使用Ant与Ant- contrib库中的PropertyRegex任务。

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

您可以使用正则表达式拆分||上的字符串,而不是匹配和使用捕获的组:

||

如何改变如下:

[^|]+(?:||[^|]+)*
  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

您不能使用普通的regex-match;相反,您需要使用某种条带的"split"函数。这取决于你使用的语言。例如,在Java中可以这样写:

final String[] fields = "aaa||bbb||ccc".split("[|][|]", -1);

或Perl中的

my @fields = split /||/, 'aaa||bbb||ccc', -1;
如果你更新你的问题,指出你使用的语言,你会得到一个更有用的答案。

下面的代码将解析这个

string x1 = "aaa||bbb||ccc";
string[] result = Regex.Split(x1, @"||");

你也可以使用

string[] parts = x1.Split(new string[] { "||" }, StringSplitOptions.None);

您可以使用Ant Addon Flaka中的split函数,例如:

<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

相关内容

  • 没有找到相关文章

最新更新