【问题标题】:match `"abc", "d,e", , "", ",f"` with groups将 `"abc", "d,e", , "", ",f"` 与组匹配
【发布时间】:2015-12-23 13:18:21
【问题描述】:

我想对字符串进行正则匹配

"abc", "d,e"  , "", ",f"

使得abcd,e、`` 和 ,f(不带引号)组分别匹配。

跟团

"([^"]*)"

匹配"abc" 位,我假设是正则表达式

(?:\s*"([^"]*)"\s*,)\s*"([^"]*)"\s*

会成功的。但是,它只匹配abcd,e

我创建了 a toy example at regex101 来显示行为。

有什么提示吗?

【问题讨论】:

  • 第一个正则表达式需要g-Global 标志或findAllmatchAll 或类似的东西。检查"([^"]*)" with g flag
  • 您使用什么语言来执行正则表达式?我认为说大多数会为您提供“下一场比赛”的上下文是正确的,在这种情况下,我认为您可以使用您的第一个示例 - "([^"]*)",只要还有比赛剩余,就反复调用get next match
  • 你到底需要匹配什么?正是您发布的字符串或每个包含单词或字母的字符串,除以引号中的“,”?

标签: regex


【解决方案1】:

您希望将“关注”组设为可选:

(?:\s*"([^"]*)"\s*)(?:,\s*"([^"]*)"\s*)?

Live demo

更新 #1

更清洁的正则表达式:

/\s*"([^"]+)"(?:,\s*)?/g

更新 #2

基于您上次的编辑以包含零个或多个字符:

/\s*"([^"]*?)"(?:,\s*)?/g

Live demo

【讨论】:

  • 引号中的字符串可以为空,因此在您的更新中将相应的* 替换为+ 是正确的。
【解决方案2】:

几乎类似于 revo 的答案,但这是我的正则表达式:

/(?:"([^"]*)")(?:\s*,\s*)?/g

Live Demo

这也将正确匹配"abc" , "d,e" , "", ",f"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    相关资源
    最近更新 更多