如何使用正则表达式获取列表中的每个字段(如java中的字符串)?
我想解析一个字符串,比如如何使用正则表达式获取列表中的每个字段(如java中的字符串)?,java,regex,regex-group,Java,Regex,Regex Group,我想解析一个字符串,比如{“aaa”,“bbb”,“ccc”}到aaa,bbb,ccc。我如何在java的正则表达式中实现它?我尝试编写如下代码: String s = "{\"aaa\",\"bbb\", \"ccc\"}"; Pattern pattern = Pattern.compile("\\{\\\"([\\w]*)\\\"([\\s]*,[\\s]*\\\"([\\w]*)\\\")*}"); Matcher matcher = pattern.matcher(s); if(mat
{“aaa”,“bbb”,“ccc”}
到aaa,bbb,ccc
。我如何在java的正则表达式中实现它?我尝试编写如下代码:
String s = "{\"aaa\",\"bbb\", \"ccc\"}";
Pattern pattern = Pattern.compile("\\{\\\"([\\w]*)\\\"([\\s]*,[\\s]*\\\"([\\w]*)\\\")*}");
Matcher matcher = pattern.matcher(s);
if(matcher.find()) {
StringBuilder sb = new StringBuilder();
int cnt = matcher.groupCount();
for(int i = 0; i < cnt; ++i) {
System.out.println(matcher.group(i));
}
}
我有一种感觉,这是关于集体的,不是贪婪的比赛,但我不知道怎么写,有人能帮我吗?非常感谢
p.S.我知道如何使用String.replace这样的方法,我只想知道它是否可以由regex完成。谢谢
感谢您的回答和时间,但我首先想要的是一个在java中使用正则表达式的代理解决方案,尤其是regex
中的组。我想知道如何使用组来解决它。
试试这个
import java.util.*;
public class Main{
public static void main(String[] args){
String s = "{\"aaa\",\"bbb\", \"ccc\"}";
s = s.substring(1,s.length() -1 );
s = s.replace("\"","");
String[] sa = s.split(", ?");
for (int i = 0; i < sa.length; i++)
System.out.println(sa[i]);
}
}
import java.util.*;
公共班机{
公共静态void main(字符串[]args){
字符串s=“{\“aaa\”、\“bbb\”、\“ccc\”}”;
s=s.substring(1,s.length()-1);
s=s。替换(“\”,“);
字符串[]sa=s.split(“,?”);
对于(int i=0;i
尝试以下示例代码:
public class RegexTester {
public static void main(String[] args) throws Exception {
String data = "{\"aaa\",\"bbb\", \"ccc\"}";
String modifiedData = data.replaceAll("\\{|\"|\\}", "");
System.out.println("Modified data : " + modifiedData);
}
使用regex尝试以下方法:
Pattern pattern = Pattern.compile("\\{\"(.+?)\"(,?)\"(.+?)\"(,?)\\s*\"(.+?)\"");
Matcher matcher = pattern.matcher(data);
System.out.println("Started");
while (matcher.find()) {
System.out.print(matcher.group(1));
System.out.print(matcher.group(2));
System.out.print(matcher.group(3));
System.out.print(matcher.group(4));
System.out.print(matcher.group(5));
}
希望这能解决您的问题。仅限正则表达式匹配:非常复杂
正则表达式模式:(?:\{(?=(?:“[^”]+”(?:,?(?=\}))*\})(?!^)\G,?“([^”]+”
注意:它需要全局修饰符g,需要转义,使用无限数量的令牌
此处演示说明:有什么原因不能使用s=s.replace(“\”,”)
然后使用s=s.substring(1,s.length()-1)
而不是regex来切掉开头和结尾的大括号吗?@merlin2011然后按regex拆分:,
@Judking,你能告诉我们更多吗?您的字符串中是否有我们可能不想删除的转义引号或逗号?@ka,是的,我一开始误解了这个问题,但是是的。@Pragnani:这不是JSON。我知道不使用正则表达式如何做,是否可以使用正则表达式??Thxbettersplit(“(?我知道如何不用regex来做,可以用regex来做吗?)??Thx@Judking:ReplaceAll使用正则表达式作为搜索词,因此这是使用正则表达式我已修改了答案并提供了一个正则表达式示例。这是我想要的,谢谢
Pattern pattern = Pattern.compile("\\{\"(.+?)\"(,?)\"(.+?)\"(,?)\\s*\"(.+?)\"");
Matcher matcher = pattern.matcher(data);
System.out.println("Started");
while (matcher.find()) {
System.out.print(matcher.group(1));
System.out.print(matcher.group(2));
System.out.print(matcher.group(3));
System.out.print(matcher.group(4));
System.out.print(matcher.group(5));
}