[英]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.