使用正则表达式拆分 CSV
Split CSV with a regex
我想要一个 CSV 解析器。但是,我想要以下内容:正则表达式必须检查 CSV 是否以逗号 ,
结尾(否则正则表达式不得将 CSV 视为有效)!如果 CSV 没问题,那么我将提取 ,
.
之间的文本
示例:
hello,world,end, //OK. CSV ends with ",". There are 3 matches: 'hello' 'world' 'end'
aa,bb,cc //NOT ok. CSV doesn't end with ",". No matches.
我有一个问题想 the regex suggested by @Denomales。如果 CSV 包含带引号的部分,则始终存在仅包含引号的匹配项。可以避免吗?
说到 regex suggested by @Denomales,我们可以做点什么。
为了确保我们只匹配末尾有逗号的字符串,您可以在模式的开头添加正向预测(下面用 ^
标记):
(?=.*,$)(?:^|,)"?((?(1)[^"]*|[^,"]*))"?(?=,|$)
^^^^^^^^ |
如果你不想捕获条目分隔标记(引号),你可以删除 (?=[^"]|(")?)
前瞻(上面用 |
标记)。
见demo
更新
我看到您对上述话题发布了 2 个答案。您的正则表达式几乎就是您所需要的,只需添加前瞻性和跳过转义实体的方法:
(?=.*,$)(?:"((?:\.|[^"])*)"|([^,]*))(?:[,])
感谢@stribizhev,它完美无缺。
如果我理解正确,逗号也可以转义:
(?=.*,$)(?:"((?:\.|[^"])*)"|((?:\.|[^,])*))(?:[,])
只是为了完整性:-)
我想要一个 CSV 解析器。但是,我想要以下内容:正则表达式必须检查 CSV 是否以逗号 ,
结尾(否则正则表达式不得将 CSV 视为有效)!如果 CSV 没问题,那么我将提取 ,
.
示例:
hello,world,end, //OK. CSV ends with ",". There are 3 matches: 'hello' 'world' 'end'
aa,bb,cc //NOT ok. CSV doesn't end with ",". No matches.
我有一个问题想 the regex suggested by @Denomales。如果 CSV 包含带引号的部分,则始终存在仅包含引号的匹配项。可以避免吗?
说到 regex suggested by @Denomales,我们可以做点什么。
为了确保我们只匹配末尾有逗号的字符串,您可以在模式的开头添加正向预测(下面用 ^
标记):
(?=.*,$)(?:^|,)"?((?(1)[^"]*|[^,"]*))"?(?=,|$)
^^^^^^^^ |
如果你不想捕获条目分隔标记(引号),你可以删除 (?=[^"]|(")?)
前瞻(上面用 |
标记)。
见demo
更新
我看到您对上述话题发布了 2 个答案。您的正则表达式几乎就是您所需要的,只需添加前瞻性和跳过转义实体的方法:
(?=.*,$)(?:"((?:\.|[^"])*)"|([^,]*))(?:[,])
感谢@stribizhev,它完美无缺。
如果我理解正确,逗号也可以转义:
(?=.*,$)(?:"((?:\.|[^"])*)"|((?:\.|[^,])*))(?:[,])
只是为了完整性:-)