首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >CSV的正则表达式,解释了发生了什么。

CSV的正则表达式,解释了发生了什么。
EN

Stack Overflow用户
提问于 2013-01-07 10:54:29
回答 1查看 55关注 0票数 2

好了,我已经看过了关于如何使用内置功能使用包含引号来拆分csv字符串的各种答案。我已经检查并测试了各种答案,我发现以下字符串是有效的:

代码语言:javascript
代码运行次数:0
运行
复制
"\"([^\"]*)\"" + //Zero or more not-quoted characters inside of quotes
"|" + //or
"(?<=,|^)" + 
"([^,]*)" + //all characters not delimiter
"(?=,|$)"  //delimiter or end of string 

我试着用我自己的知识来弄清楚到底是怎么回事,尤其是上面那段未被评论的部分。有谁能解释一下吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-07 11:20:06

(?<=,|^)(?=,|$)是正则表达式断言,用于实现所谓的(分别)正向后视和前视。

您的正则表达式(为清晰起见,删除了构建java字符串的引号和连接)匹配:

代码语言:javascript
代码运行次数:0
运行
复制
"([^"]*)"  // 0+ not-quote characters inside of quotes (captured)
|          // OR 
      ([^,]*)          // any 0+ character which is not , (captured) only if
             (?<=,|^)  // preceded by , or at start of line AND
             (?=,|$)   // followed by , or at end of line

这些构造被称为零宽度,因为它们不消耗测试字符串中的字符。还存在断言的否定版本,使用!而不是=,因此只有当表达式之前(后视)或后面(前视)没有断言时,(?<!,|^)(?!,|$)才意味着匹配。

更多信息here

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14189228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档