帮忙写个正则表达式:用逗号分隔字符串,双引号内不分隔(急用)。

niuniu20008 2017-12-11 06:07:16
最近在写个功能,需要读取字符串后,用逗号进行分隔处理,楼主正则不太好,看了2个小时别人的博客也没写出来,麻烦大家帮忙,例如

String line = "abc,123,\"love123,520\"";
String[] arrs = line.split(正则表达式);
System.out.println(arrs.length);// 3

...全文
1103 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
rickylin86 2017-12-13
  • 打赏
  • 举报
回复
---------- java ---------- abc 123 "love123,520" Output completed (0 sec consumed) - Normal Termination
rickylin86 2017-12-13
  • 打赏
  • 举报
回复

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test{
	public static void main(String[] args){
		String content = "abc,123,\"love123,520\"";
		String regex = "(((\"[^\"]*\")|[^\",])*)(,|$)";
		Matcher matcher = Pattern.compile(regex).matcher(content);
		while(matcher.find()){
			System.out.println(matcher.group(1));
		}
	}
}
AlbertLiangzt 2017-12-12
  • 打赏
  • 举报
回复
引用 4 楼 niuniu20008 的回复:
[quote=引用 2 楼 AlbertLiangzt 的回复:]
首先呢,你得分成两部分,一部分是引号里的,一部分是引号外的,将引号里的单独处理。
不知道你的不分隔处理是什么意思,是单独提出来不做处理吗?

String line = "abc,123,\"love123,520\"";

Pattern pa=Pattern.compile("\"(.*?)\"");
Matcher ma=pa.matcher(line);
String rep = null; //被替换的内容

//替换引号里的内容
while(ma.find())
{
line=line.replace(ma.group(),"**");
rep = ma.group();
}

String[] arrs = line.split(",");

//去掉逗号后的内容
for(String a:arrs){
System.out.print(a);
}
System.out.println();
System.out.println(arrs.length); //3
System.out.println(rep);



这是一种思路,多谢啊,我这个demo太短了,如果这个字符串中有很多个双引号,比如:String line = "abc,123,\"love123,520\",\"234,345\",\"123,098\"";
你这种方式会就复杂许多,不知道一个正则能否搞定?[/quote]

大概是这样的,如果你只是想去掉逗号,按照原字符输出,还得加一下逻辑
Braska 2017-12-12
  • 打赏
  • 举报
回复

(?<!("[^,]{1,1000})),(?![^,]{1,1000}")
(?<!("[^,]+)),(?![^,]+")//没测试过,非jdk8可以试试这条。


vswen5 2017-12-12
  • 打赏
  • 举报
回复
先按逗号分隔 然后循环去查引号 拼接起来
天之上有什么 2017-12-11
  • 打赏
  • 举报
回复
niuniu20008 2017-12-11
  • 打赏
  • 举报
回复
引用 2 楼 AlbertLiangzt 的回复:
首先呢,你得分成两部分,一部分是引号里的,一部分是引号外的,将引号里的单独处理。 不知道你的不分隔处理是什么意思,是单独提出来不做处理吗?

		String line = "abc,123,\"love123,520\"";
		
		Pattern pa=Pattern.compile("\"(.*?)\"");  
		Matcher ma=pa.matcher(line);  
		String rep = null;	//被替换的内容
		
		//替换引号里的内容
		while(ma.find())  
		{                 
			line=line.replace(ma.group(),"**");
			rep = ma.group();	
		} 
		
		String[] arrs = line.split(",");
		
		//去掉逗号后的内容
		for(String a:arrs){
			System.out.print(a);
		}
		System.out.println();
		System.out.println(arrs.length);	//3
		System.out.println(rep);		

这是一种思路,多谢啊,我这个demo太短了,如果这个字符串中有很多个双引号,比如:String line = "abc,123,\"love123,520\",\"234,345\",\"123,098\""; 你这种方式会就复杂许多,不知道一个正则能否搞定?
niuniu20008 2017-12-11
  • 打赏
  • 举报
回复
引用 1 楼 reyoreyoreyo 的回复:
没能理解你说的。 String line = "abc,123,\"love123,520\""; String[] arrs = line.split(","); System.out.println(arrs.length);// 3 这样就可以了吧
双引号内的不分隔,最后的结果是arr[0] = abc arr[1]=123 arr[2]="love123,520"
AlbertLiangzt 2017-12-11
  • 打赏
  • 举报
回复
首先呢,你得分成两部分,一部分是引号里的,一部分是引号外的,将引号里的单独处理。
不知道你的不分隔处理是什么意思,是单独提出来不做处理吗?

String line = "abc,123,\"love123,520\"";

Pattern pa=Pattern.compile("\"(.*?)\"");
Matcher ma=pa.matcher(line);
String rep = null; //被替换的内容

//替换引号里的内容
while(ma.find())
{
line=line.replace(ma.group(),"**");
rep = ma.group();
}

String[] arrs = line.split(",");

//去掉逗号后的内容
for(String a:arrs){
System.out.print(a);
}
System.out.println();
System.out.println(arrs.length); //3
System.out.println(rep);


reyoreyoreyo 2017-12-11
  • 打赏
  • 举报
回复
没能理解你说的。 String line = "abc,123,\"love123,520\""; String[] arrs = line.split(","); System.out.println(arrs.length);// 3 这样就可以了吧

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧