2011-12-16 40 views
2

根本無法解決這個問題。用管道分割字符串的正則表達式

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

我有一個正常工作的aaa||bbb這是(.*)\|\|(.*),但不適用於3個值或更多。

我需要一個爲無限數量的值工作。

感謝

編輯:對不起忘了提。我從Ant-Contrib庫中使用Ant和PropertyRegex任務。

所以基本上只需要普通的正則表達式。

+1

當它總是兩管的順序,爲什麼不(在C#一樣string.Split)通過使用簡單的字符串操作將其分割?甚至需要更少的計算工作。 – Matthias 2011-12-16 03:13:47

+0

哪種語言? – codaddict 2011-12-16 03:16:33

回答

3

使用捕獲組匹配而不是和,您可以使用正則表達式上||分割字符串:

\|\| 
0

你不能做到這一點與普通的正則表達式匹配;相反,你需要使用一些條帶的「分割」功能。這將取決於您使用的語言。例如,在Java中,你可以寫:

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

或在Perl:

my @fields = split /\|\|/, 'aaa||bbb||ccc', -1; 

如果您更新您的問題,表示你所使用的語言,你會得到一個更加有用的答案。

0

下面的代碼將解決這個

string x1 = "aaa||bbb||ccc"; 

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

你可以使用這個太

string[] parts = x1.Split(new string[] { "||" }, StringSplitOptions.None); 
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 
0

你可以使用分割功能從螞蟻附加組件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