Vic*_*azi 5 java regex regex-negation regex-lookarounds
我正在尝试创建一个Java正则表达式,它将用一个空格替换字符串中出现的所有空格,除非引号之间出现白色空格(单引号或双引号)
如果我只是在寻找双引号,我可以使用前瞻:
text.replaceAll("\\s+ (?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)", " ");
Run Code Online (Sandbox Code Playgroud)
如果我只是在寻找单引号,我可以使用类似的模式.
诀窍是找到两者.
我有个好主意运行双引号模式后跟单引号模式,但当然最终会替换所有空格而不管引号.
所以这里有一些测试和预期结果
a b c d e --> a b c d e
a b "c d" e --> a b "c d" e
a b 'c d' e --> a b 'c d' e
a b "c d' e --> a b "c d' e (Can't mix and match quotes)
Run Code Online (Sandbox Code Playgroud)
有没有办法在Java正则表达式中实现这一目标?
假设已经单独验证了无效输入.因此,以下任何一种都不会发生:
a "b c ' d
a 'b " c' d
a 'b c d
Run Code Online (Sandbox Code Playgroud)
小智 1
我建议标准化您的字符串封装。使用正则表达式来替换标准的替代方案。假设您选择双引号 " 那么您可以将字符串拆分为 " 并且所有奇数元素都是带引号的内容,偶数元素将不带引号,仅对偶数元素运行正则表达式替换并从更改后的数组重建字符串。
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |