Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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代码在空格上拆分忽略if内引号_Java_Regex - Fatal编程技术网

使用regex/Java代码在空格上拆分忽略if内引号

使用regex/Java代码在空格上拆分忽略if内引号,java,regex,Java,Regex,我有两个字符串,如下所示。我想在空格上拆分这些字符串,但如果在引号中找到空格,则忽略空格 LA L'TL0BPC,C'ABC ' THIS IS COMMENT LA C'TL0PC',C'ABC ' THIS IS COMMENT MVC EBW000(4),=C'MPI ' THIS IS ANOTHER' CASE 我想把这些线像这样分开 LAL'TL0BPC,C'ABC'这是注释 LAC'TL0PC',C'ABC'此是注释 如何使用java正则表达式实现这

我有两个字符串,如下所示。我想在空格上拆分这些字符串,但如果在引号中找到空格,则忽略空格

LA    L'TL0BPC,C'ABC  '   THIS IS COMMENT
LA    C'TL0PC',C'ABC  '   THIS IS COMMENT
MVC   EBW000(4),=C'MPI '  THIS IS ANOTHER' CASE
我想把这些线像这样分开

LA
L'TL0BPC,C'ABC'
注释

LA
C'TL0PC',C'ABC'
注释

如何使用java正则表达式实现这一点……任何其他解决方案都是可以接受的

我试过这个:

String ODD_QT_REGEX="[ ]+(?=([^'']*'[^'']*')*[^'']*)"; 
String EVEN_QT_REGEX="[ ]+(?=([^'']*'[^'']*')*[^'']*$)"; 

但这并不能满足我的需要。

您可以进行匹配而不是拆分。根据此
“[]+(?=([^']*'[^']*')*[^']*')进行拆分正则表达式只有在输入有平衡引号时才可能

看来我解决了问题。和OP的正则表达式一样,但是这个正则表达式不会考虑撇号作为一个引号。下面的正则表达式将匹配一个或多个空格字符,后跟

  • \b'\b
    撇号
  • |
  • “[^']”
    单引号块
  • |
  • [^']
    任何字符,但不是单引号
  • (?:\\b'\\b |'[^']*'.[^'])*
    ,零次或多次。然后,它必须紧跟着一个线锚的末端
代码:

String r = "LA    L'TL0BPC,C'ABC  '  THIS IS COMMENT";
String[] m = r.split("\\s+(?=(?:\\b'\\b|'[^']*'|[^'])*$)");
System.out.println(Arrays.toString(m));
[LA, L'TL0BPC,C'ABC  ', THIS, IS, COMMENT]

更确切地说,您可以用lookarounds替换上述正则表达式中的
\b

"\\s+(?=(?:(?<=[a-zA-Z])'(?=[A-Za-z])|'[^']*'|[^'])*$)"

你试过什么了吗?String ODD_QT_REGEX=“[]+(?=([^']*”[^']*)*[^']*”;字符串偶数_QT_REGEX=“[]+(?=([^']*'[^']*')*[^']*$)”;我试着用这两个…但它失败了…你为什么把它作为评论发布?你的尝试应该是你问题的一部分。所以使用选项把它放在那里。不平衡的报价把我甩了!进行一些测试…如果通过,我将接受您的ans…和+1作为解释…EMPAS870 EQU*>>>重新标记不合格循环的顶部..此行有任何可能的更正吗???在报价前不会在空格上拆分…没有,因为只有一个报价,并且不是撇号。MVC EBW000(4),=C'MPI'告诉EMQ4处理组件NRFN的此项也失败…请提供帮助。。。。。