我有两个像下面的字符串..我想在空格上拆分这些字符串,但如果在引号内找到空格则忽略空格....
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="[ ]+(?=([^'']*'[^'']*')*[^'']*$)";
但这并不能满足我的需要。
答案 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]