根据文本限定符正则表达式拆分字符串 java
split string based on text qualifier regex java
例如,我想根据文本限定符拆分字符串
"1","10411721","MikeTison","08/11/2009","21/11/2009","2800.00","002934538","051","New York","10411720-002",".\Images\b.jpg",".\RTF\b.rtf"
资格赛="
拆分器 = ,
我想根据 Spliter ,
拆分字符串,但如果 Spliter 出现在限定符 "
内,则忽略它和 return 包含 Spliter 的字符串。
我使用的正则表达式是(?:|,)(\"(?:[^\"]+|\"\")*\"|[^,]*)
但是这个正则表达式只有 returns 逗号,请从这个角度帮助我,因为我是正则表达式的新手
请注意,如果我们在字符串中有换行符,即 \r\n
,那么它应该忽略换行符
"1","10411","Muis","a","21/11/2009","2800.06","0029683778","03005136851","Awan","10411720-001",".\Images\a.jpg",".\RTF\a.rtf"
"2","08/10/2009","07:32","Call","On-Net","030092343242342376543","Monk","00:00","1.500","0.000","10.000","0.200"
"2","08/10/2009","02:50","Call","Off-Net","030092343242342376543","Une","08:00","1.500","2.000","20.000","3.500"
"2","09/10/2009","03:55","SMS","On-Net","030092343242342376543","Mink","00:00","1.500","0.000","5.000","100.500"
"2","09/10/2009","12:30","Call","Off-Net","030092343242342376543","Zog","01:01","3.500","3.000","70.000","6.500"
"2","09/10/2009","09:11","Call","On-Net","030092343242342376543","Monk","02:30","2.00","2.000","90.000","4.000"
删除整个字符串的第一个和最后一个字符。然后用“,”分割,
String test = "\"1\",\"10411721\",\"MikeTison\",\"08/11/2009\",\"21/11/2009\",\"2800.00\",\"002934538\",\"051\",\"New York\",\"10411720-002\",\".\Images\b.jpg\",\".\RTF\b.rtf\"";
if (test.length() > 0)
test = test.substring(1, test.length()-1);
System.out.println(Arrays.toString(test.split("\",\"")));
您可以使用此正则表达式拆分:
String[] arr = input.split( "(?=(([^\"]*\"){2})*[^\"]*$),+" );
如果这些正则表达式在双引号之外,则此正则表达式将以逗号分隔,方法是使用先行确保逗号后有偶数个引号。
即使你有换行符也能正常工作..试试看
String str="\"1\",\"10411721\",\"MikeTison\",\"08/11/2009\",\"21/11/2009\",\"2800.00\",\"002934538\",\"051\",\"New York\",\"10411720-002\",\".\Images\b.jpg\",\".\RTF\b.rtf\"";
System.out.println(Arrays.toString(str.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)")));
可能最简单的解决方案不是搜索 split
的位置,而是 find
您想要 return 的元素。在您的情况下,这些元素
- 开始
"
- 以
"
结尾
- 里面没有
"
。
所以你试试
String data = "\"1\",\"10411721\",\"MikeTison\",\"08/11/2009\",\"21/11/2009\",\"2800.00\",\"002934538\",\"051\",\"New York\",\"10411720-002\",\".\Images\b.jpg\",\".\RTF\b.rtf\"";
Pattern p = Pattern.compile("\"([^\"]+)\"");
Matcher m = p.matcher(data);
while(m.find()){
System.out.println(m.group(1));
}
输出:
1
10411721
MikeTison
08/11/2009
21/11/2009
2800.00
002934538
051
New York
10411720-002
.\Images\b.jpg
.\RTF\b.rtf
例如,我想根据文本限定符拆分字符串
"1","10411721","MikeTison","08/11/2009","21/11/2009","2800.00","002934538","051","New York","10411720-002",".\Images\b.jpg",".\RTF\b.rtf"
资格赛="
拆分器 = ,
我想根据 Spliter ,
拆分字符串,但如果 Spliter 出现在限定符 "
内,则忽略它和 return 包含 Spliter 的字符串。
我使用的正则表达式是(?:|,)(\"(?:[^\"]+|\"\")*\"|[^,]*)
但是这个正则表达式只有 returns 逗号,请从这个角度帮助我,因为我是正则表达式的新手
请注意,如果我们在字符串中有换行符,即 \r\n
,那么它应该忽略换行符
"1","10411","Muis","a","21/11/2009","2800.06","0029683778","03005136851","Awan","10411720-001",".\Images\a.jpg",".\RTF\a.rtf"
"2","08/10/2009","07:32","Call","On-Net","030092343242342376543","Monk","00:00","1.500","0.000","10.000","0.200"
"2","08/10/2009","02:50","Call","Off-Net","030092343242342376543","Une","08:00","1.500","2.000","20.000","3.500"
"2","09/10/2009","03:55","SMS","On-Net","030092343242342376543","Mink","00:00","1.500","0.000","5.000","100.500"
"2","09/10/2009","12:30","Call","Off-Net","030092343242342376543","Zog","01:01","3.500","3.000","70.000","6.500"
"2","09/10/2009","09:11","Call","On-Net","030092343242342376543","Monk","02:30","2.00","2.000","90.000","4.000"
删除整个字符串的第一个和最后一个字符。然后用“,”分割,
String test = "\"1\",\"10411721\",\"MikeTison\",\"08/11/2009\",\"21/11/2009\",\"2800.00\",\"002934538\",\"051\",\"New York\",\"10411720-002\",\".\Images\b.jpg\",\".\RTF\b.rtf\"";
if (test.length() > 0)
test = test.substring(1, test.length()-1);
System.out.println(Arrays.toString(test.split("\",\"")));
您可以使用此正则表达式拆分:
String[] arr = input.split( "(?=(([^\"]*\"){2})*[^\"]*$),+" );
如果这些正则表达式在双引号之外,则此正则表达式将以逗号分隔,方法是使用先行确保逗号后有偶数个引号。
即使你有换行符也能正常工作..试试看
String str="\"1\",\"10411721\",\"MikeTison\",\"08/11/2009\",\"21/11/2009\",\"2800.00\",\"002934538\",\"051\",\"New York\",\"10411720-002\",\".\Images\b.jpg\",\".\RTF\b.rtf\"";
System.out.println(Arrays.toString(str.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)")));
可能最简单的解决方案不是搜索 split
的位置,而是 find
您想要 return 的元素。在您的情况下,这些元素
- 开始
"
- 以
"
结尾 - 里面没有
"
。
所以你试试
String data = "\"1\",\"10411721\",\"MikeTison\",\"08/11/2009\",\"21/11/2009\",\"2800.00\",\"002934538\",\"051\",\"New York\",\"10411720-002\",\".\Images\b.jpg\",\".\RTF\b.rtf\"";
Pattern p = Pattern.compile("\"([^\"]+)\"");
Matcher m = p.matcher(data);
while(m.find()){
System.out.println(m.group(1));
}
输出:
1
10411721
MikeTison
08/11/2009
21/11/2009
2800.00
002934538
051
New York
10411720-002
.\Images\b.jpg
.\RTF\b.rtf