Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于文本限定符regex-java的拆分字符串_Java_Regex_Split - Fatal编程技术网

基于文本限定符regex-java的拆分字符串

基于文本限定符regex-java的拆分字符串,java,regex,split,Java,Regex,Split,例如,我想基于文本限定符拆分字符串 "1","10411721","MikeTison","08/11/2009","21/11/2009","2800.00","002934538","051","New York","10411720-002",".\Images\b.jpg",".\RTF\b.rtf" 限定符=“ 拆分器=, 我想根据拆分器,拆分字符串,但如果拆分器位于限定符“内,则忽略它并返回包含拆分器的字符串 我使用的正则表达式是(?:|,)(\”(?:[^\“]+\124;\“\

例如,我想基于文本限定符拆分字符串

"1","10411721","MikeTison","08/11/2009","21/11/2009","2800.00","002934538","051","New York","10411720-002",".\Images\b.jpg",".\RTF\b.rtf"
限定符=
拆分器=

我想根据拆分器
拆分字符串,但如果拆分器位于限定符
内,则忽略它并返回包含拆分器的字符串

我使用的正则表达式是
(?:|,)(\”(?:[^\“]+\124;\“\”*”。“[^,]*)

但是这个正则表达式只返回逗号,请在这个方面帮助我,因为我对正则表达式是新手

请注意,如果字符串ie
\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[] 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(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)")));

最简单的解决方案可能不是搜索要拆分的位置,而是查找要返回的元素

  • 启动
  • 结尾“
  • 里面没有
所以你试着用类似的东西

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

我不想从字符串中删除第一个和最后一个字符,因为使用此限定符会干扰我需要正则表达式的解决方案我上面给出的代码很好地分割了您的示例。问题是什么?代码在任何限定符拆分器组合中都可以正常工作它在单行字符串中也可以正常工作,但是如果字符串中有\r\n(新行字符),那么它就不能正常工作@Nuri TasdemirIf如果新行字符在限定字符串中,则没有问题。另一方面,如果新行字符在限定字符串之外,则这与您在上面提出的问题不同。@anubhave感谢您的回复,但如果字符串中有新行字符,您提供的表达式将不起作用\r\n,它将把限定符内的最后一个单词和新行字符后的第一个单词结合起来。这对给定的输入有效。你应该编辑这个问题,并在它不起作用的地方显示一些代码,然后我肯定可以进一步调整它。对于给定的输入,你期望的输出是什么?
1
10411721
MikeTison
08/11/2009
21/11/2009
2800.00
002934538
051
New York
10411720-002
.\Images\b.jpg
.\RTF\b.rtf