繁体   English   中英

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

[英]Split on space ignore if inside quotes using regex / Java code

我有两个像下面的字符串..我想在空格上分割这些字符串但如果在引号内找到空格则忽略空格....

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正则表达式实现这一点....任何其他解决方案也是可以接受的..

我试过这个:

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));

要么

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

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

输出:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM