如果在引号内使用正则表达式/ Java代码,则在空间上拆分忽略

时间:2015-03-06 14:23:34

标签: 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

我想像这样分割这些行

LA L'TL0BPC,C'ABC ' THIS IS COMMENT

LA C'TL0PC',C'ABC ' THIS IS COMMENT

如何使用java regex实现这一点....任何其他解决方案也是可以接受的..

我试过这个:

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

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

1 个答案:

答案 0 :(得分:2)

您可以进行匹配而不是拆分。只有当您的输入具有平衡报价时,才可以根据此"[ ]+(?=([^'']*'[^'']*')*[^'']*)";正则表达式进行拆分。

似乎我想出了问题所在。与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));

对于更确切的情况,您可以使用外观替换上述正则表达式中的\b

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

<强>输出:

[LA, L'TL0BPC,C'ABC  ', THIS, IS, COMMENT]