如何用正则表达式识别分号分隔CSV中含逗号和空格的文本?
正则表达式解决方案:提取分号分隔CSV中的含逗号完整字段
问题背景
原CSV以分号(;)作为分隔符,部分字段内部包含逗号(,)和空白字符,直接转换为逗号分隔格式会导致列数异常,需要提取如下完整目标字段:
al-Awja, near Tikrit Oversaw Special Republican Guard, Special Security Organisation, and Republican Guard
原正则([A-Za-z0-9-]+)([,])(\s+)([A-Za-z0-9-]+)仅能匹配局部内容,无法覆盖完整字段。
可行正则方案
方案1:匹配所有完整字段(通用)
适用于字段本身不含分号的标准分号分隔CSV,可提取任意完整字段:
[^;]+(?=;|$)
- 规则解释:
[^;]+:贪婪匹配任意非分号的字符(包含逗号、空白、字母、连字符等所有字段内允许的内容)(?=;|$):通过正向预查确保匹配内容的结尾是分号或字符串末尾,精准定位单个字段边界
方案2:仅匹配含逗号的目标字段
如果只需要提取内部包含逗号的字段,可使用:
[^;]*,[^;]*(?=;|$)
- 规则解释:匹配至少包含一个逗号的完整字段,同样以分号或字符串结尾作为边界,精准命中需求中的目标字段
方案3:适配带引号包裹的字段
若原CSV中含逗号的字段被双引号包裹(如"al-Awja, near Tikrit"),可使用:
"([^"]+)"(?=;|$)
- 规则解释:匹配被双引号包裹的完整字段,捕获组
$1即为不带引号的目标内容
内容的提问来源于stack exchange,提问作者Saurabh Kumar Singh
相关产品推荐
相关产品推荐

