首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用正则表达式根据模式拆分字符串

如何使用正则表达式根据模式拆分字符串
EN

Stack Overflow用户
提问于 2013-03-29 15:44:46
回答 4查看 17.3K关注 0票数 3

基于正则表达式拆分字符串时遇到问题。

代码语言:javascript
复制
String str = "1=(1-2,3-4),2=2,3=3,4=4";
Pattern commaPattern = Pattern.compile("\\([0-9-]+,[0-9-]+\\)|(,)") ;
String[] arr = commaPattern.split(str);
for (String s : arr)
{
    System.out.println(s);
}

预期输出,

代码语言:javascript
复制
1=(1-2,3-4)     
2=2    
3=3    
4=4

实际输出,

代码语言:javascript
复制
1=

2=2
3=3
4=4
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-29 16:01:30

此正则表达式将根据需要拆分

代码语言:javascript
复制
,(?![^()]*\\))
  ------------
      |->split with , only if it is not within ()
票数 5
EN

Stack Overflow用户

发布于 2013-03-29 16:13:53

这并不是很适合split(...)。请考虑扫描输入并执行match操作:

代码语言:javascript
复制
String str = "1=(1-2,3-4),2=2,3=3,4=4";

Matcher m = Pattern.compile("(\\d+)=(\\d+|\\([^)]*\\))").matcher(str);

while(m.find()) {
  String key = m.group(1);
  String value = m.group(2);
  System.out.printf("key=%s, value=%s\n", key, value);
}

它将打印:

代码语言:javascript
复制
key=1, value=(1-2,3-4)
key=2, value=2
key=3, value=3
key=4, value=4
票数 3
EN

Stack Overflow用户

发布于 2013-03-29 15:54:19

在这里你必须使用一些前瞻机制。在我看来,你是想用不在括号里的逗号来拆分它。但是你的正则表达式说:

代码语言:javascript
复制
Split on comma OR on comma between numbers in parenthesis 

所以你的字符串被分割成4个位置1) (1-2,3-4) 2-4)逗号

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15699353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档