2011-04-04 85 views
0

我試圖用正則表達式在||||,|分隔符上分割格式爲Bananas|,|Bananas|||Bananas|Oranges|,|Bananas|||Bananas|Oranges|||Bananas|Oranges|Green Apples|,|Bananas|||Bananas|Oranges|||Bananas|Oranges|Red Apples|,|Bananas|||Bananas|Oranges|||Bananas|Oranges|Pears的字符串。我使用的是[a-zA-Z |]+\|[,|\0]\|,但我遇到了一個小問題:三角管分隔符被[a-zA-Z |]字符類捕獲。在正則表達式中只接受一行中的單個字符

有沒有辦法將[a-zA-Z |]字符類更改爲只接受一行中的一個管道字符,同時允許任何數量的其他字符? (也就是說,它應該接受accessories|batteries但不accessories||batteries。)

更多的例子:從原始字符串,正則表達式應該接受Bananas|Oranges|,|Bananas|||,不Bananas|||Bananas|Oranges|,|,與|[,|]|之前的任何數量的單管分隔的名字。

回答

1

我想你會想要一個組包含一堆這些[a-zA-Z ]+總是跟着一個\|。該組可以重複多次,並始終由,|||因此終止(,|\|)\|

共(後|後):([a-zA-Z ]+\|)+(,|\|)\|

+0

這是行不通的,因爲這將期待的第一個字符是一個|。但是,它應該被允許在搜索文本的任何地方。 – Kissaki 2011-04-04 22:40:06

+0

我已經用輸入字符串中更具體的接受/拒絕示例更新了問題。 – CajunLuke 2011-04-04 22:46:59

+0

我覺得你的例子更清楚一點 - '([a-zA-Z] + \ |)+(,| \ |)\ |' – 2011-04-04 22:59:04

0

既然你說你是使用Java,另一種方法是計算:

s.replaceAll("|||", "|,|").split("|,|"); 

其中s是您的起始字符串。

+0

確實,這是可行的,但'|||'和'|,|'之間的差異是顯着的。不過,我可以將全部替換爲完全不同的東西(比如'|;'')。 – CajunLuke 2011-04-04 22:56:00

0

爲什麼不在正則表達式中使用非貪婪量詞?這樣,它會在第一個找到的||||,|處停止。

0

我錯過了什麼,但爲什麼你不能直接使用正則表達式分割== \|\|\||\|,\|?這裏是一個測試腳本,對我的作品:

import java.util.regex.*; 
public class TEST { 
    public static void main(String[] args) { 
     String subjectString = "Bananas|,|Bananas|||Bananas|Ora" + 
     "nges|,|Bananas|||Bananas|Oranges|||Bananas|Oranges|Gre" + 
     "en Apples|,|Bananas|||Bananas|Oranges|||Bananas|Orange" + 
     "s|Red Apples|,|Bananas|||Bananas|Oranges|||Bananas|Ora" + 
     "nges|Pears"; 
     String[] splitArray = null; 
     Pattern regex = Pattern.compile("\\|\\|\\||\\|,\\|"); 
     splitArray = regex.split(subjectString); 
     int i; 
     for (i = 0; i < splitArray.length; ++i) { 
      System.out.println(splitArray[i]); 
     } 
    } 
} 

這裏是輸出:

Bananas
Bananas
Bananas|Oranges
Bananas
Bananas|Oranges
Bananas|Oranges|Green Apples
Bananas
Bananas|Oranges
Bananas|Oranges|Red Apples
Bananas
Bananas|Oranges
Bananas|Oranges|Pears

+0

然後我不知道這些部分是以'|||'還是'|,|'結尾。 – CajunLuke 2011-04-05 13:49:17

+0

CajunLuke,你應該將這個細節添加到你的問題描述中。通常,分隔符之間沒有區別,分隔符不包含在結果中。 – 2011-04-05 15:59:32

相關問題