gpt4 book ai didi

java - 用于提取键值对的正则表达式

转载 作者:行者123 更新时间:2023-12-01 23:17:34 24 4
gpt4 key购买 nike

我有一个文本文件。该特定文本文件的示例内容类似于

root(ROOT-0, good-4)nn(management-2, company-1)nsubj(good-4, management-2)

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

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));
}



}

}

但是 arraylist 没有被填充。为什么会这样

最佳答案

您在 Pattern 中使用了不带引号的括号.

不带引号的括号暗示 Pattern 中的组的定义,以供后续引用。

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

要获得粗略的解决方案,请尝试以下操作:

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);

输出:

[root(ROOT-0, good-4), nn(management-2, company-1), nsubj(good-4, management-2)]

最后说明:为了改进解决方案,我会尝试使用组来区分 Pattern 的第一部分和括号中的实际对,因此构建 Map<String, ArrayList<String>>在本例中作为数据对象 - 但这超出了本答案的范围。

关于java - 用于提取键值对的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20994322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com