2015-05-11 44 views
1

我在java中创建正则表达式时遇到了一些麻烦,我希望它匹配字符串中只有一个;且没有一个是;;的字符串的所有部分。分割函数调用中的Java正则表达式问题

如在字符串today;i;;drank water后的;今天会比赛并且;;不会匹配。到目前为止,我已经尝试了正则表达式;{1}来说,如果只有一个;匹配。

但是它保持匹配双重;;。正则表达式;{1,2}同样表示匹配一个;但不是两个或更多;。这两个正则表达式都是贪婪类。此外,我正在使用String.split(regular expression) java函数的正则表达式。

任何人都可以帮助什么可能会出错或如果我的正则表达式形成的理解是有点关闭为什么我的正则表达式工作不正常?

另外,作为纸币的输出I从分割得到的是这样的today;i;;drank water

today 
i 

drank water 

是所述第三元件,如果在分割阵列串的空白。

+0

你知道,格式化文本减少了麻烦? –

+0

而你不想匹配; d在第二部分? –

+0

我不知道它是否是合法的表达,但你可以尝试; {1,1} – Suspended

回答

1

您可以使用以下表达式:\b;\b。一个例子是here

String str = "today;i;;drank water"; 
     String[] split = str.split("\\b;\\b"); 
     for(String s : split) 
      System.out.println(s); 

收率:

today 
i;;drank water 
+0

相同!感谢我的帮助,我知道简单的正则表达式,但不是主人,所以有时这些类型会给我带来麻烦,因为我不必经常使用它们! – jgr208

+1

@ jgr208:当他们中的几个在你的脸上爆炸时,你通常会得到它们的萦绕:) – npinti

1

另一种方法是使用负先行/回顾后:

(?<!;);(?!;) 

这意味着:分号不preceeded和后面没有分号。

活生生的例子:https://regex101.com/r/cB7oJ7/1