首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提取键值对的正则表达式

提取键值对的正则表达式
EN

Stack Overflow用户
提问于 2014-01-08 11:27:07
回答 1查看 310关注 0票数 0

我有个文本文件。特定文本文件的示例内容如下

代码语言:javascript
复制
root(ROOT-0, good-4)nn(management-2, company-1)nsubj(good-4, management-2)

现在,我需要将其分开,并将其存储在ArrayList中。为此,我编写了以下代码

代码语言:javascript
复制
public class subject {
public void getsub(String f){
    ArrayList <String>ar=new ArrayList<String>();
    String a="[a-z]([a-z]-[0-9],[a-z]-[0-9])";
    Pattern pattern=Pattern.compile(a);
    Matcher matcher=pattern.matcher(f);
    while(matcher.find()){
        if(matcher.find()){
            ar.add(matcher.group(0));
        }
    }
    System.out.println(ar.size());
    for(int i=0;i<ar.size();i++){
        System.out.println(ar.get(i));
    }



}

}

但列车员并没有增加人口。为什么会这样?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-08 11:31:08

您在Pattern中使用未引用的括号。

未引号括号意味着在您的Pattern中定义一个组,以供后面的引用使用。

但是,这里您试图匹配实际的括号,因此它们需要转义为这样:\\(\\)

对于一个粗略的解决方案,请尝试如下:

代码语言:javascript
复制
String text = "root(ROOT-0, good-4)nn(management-2, company-1)nsubj(good-4, management-2)";
List<String> myPairs = new ArrayList<String>();
Pattern p = Pattern.compile(".+?\\(.+?,.+?\\)");
Matcher m = p.matcher(text);
while (m.find()) {
    myPairs.add(m.group());
}
System.out.println(myPairs);

输出:

代码语言:javascript
复制
[root(ROOT-0, good-4), nn(management-2, company-1), nsubj(good-4, management-2)]

最后注意:为了获得更好的解决方案,我将尝试使用组来区分Pattern的第一部分和括号中的实际对,因此在这种情况下构建一个Map<String, ArrayList<String>>作为数据对象--但这超出了这个答案的范围。

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

https://stackoverflow.com/questions/20994322

复制
相关文章

相似问题

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