2011-04-04 87 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

相关问题