【问题标题】:Split a string with comma while ignoring commas before and when followed with a whitespace用逗号拆分字符串,同时忽略逗号前后的空格
【发布时间】:2021-07-09 19:14:27
【问题描述】:

我一直在努力解决这个问题 - 但本质上我要解决的是我有一个字符串,该字符串是从较大的字符串中解析出来的,该字符串包含许多由逗号分隔的字段“,”看起来像这样:

{parameters format=,, =separtorChar=|, field.delim=,}

请注意,您可能会注意到 - 一些“值”实际上是逗号“,”本身 - 因此,当我用“,”拆分时,它会产生错误的结果。

我已经能够使用以下正则表达式解析出分隔逗号:

(?<![,],),(?!,)

这给了我分隔逗号,但最终也将字符串末尾的逗号视为分隔符而不是值 结果:

{parameters format=,{,} =separtorChar=|{,} field.delim={,}} <-- this comma "," is a value 

无法保证逗号始终位于“=”旁边,因此我无法使用模式搜索或省略空格,因为该值需要保持不变,因为它位于“=”和以下字段之间或行尾

任何想法或建议将不胜感激
谢谢!

【问题讨论】:

  • 也许你想匹配逗号后面跟一个空格? (?&lt;!,,),(?=\s)?你如何口头描述你需要的模式?它不应该匹配没有紧跟在两个逗号前面的逗号和...?
  • @WiktorStribiżew 哇!如此简单,我可以相信我错过了 - 就是这样!我的天啊 !昨晚凌晨 4 点,当我用头敲键盘时,你在哪里 LOL

标签: regex scala csv split


【解决方案1】:

您可以使用(?=\s) 正向前瞻来匹配紧跟空格的位置:

(?<!,,),(?=\s)

请参阅regex demo

详情

  • (?&lt;!,,) - 一个否定的向后查找,匹配一个没有紧跟在 ,,(两个逗号)之前的位置
  • , - 逗号
  • (?=\s) - 与紧跟空格的位置匹配的正向前瞻。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-23
    • 2010-12-17
    • 1970-01-01
    • 2011-12-25
    相关资源
    最近更新 更多