C++ 正则表达式 : matching a label followed by comma separated values

标签 c++ regex

来自字符串

label: first, second, third

我要提取:

  • 标签
  • 第一
  • 第二个
  • 第三名

以下所有输入均有效:

label: first, second, third
label: first
label

(编辑:列表可以有 0、1 或 n 项)

我想出了两种不同的模式,但没有一种给我“正确”的结果:

(?:(\w+ (\d+))| -> (\w+)|, (\w+))+

给我

  • 标签:第一、第二、第三
  • ,第三名
  • 标签
  • 第一
  • 第三名

    re (\w+)(?::(\w+))?(?:, (\w+))*

给我

  • 标签:第一、第二、第三
  • 标签
  • 第一
  • 第三名

这里是 a test implementation

如何让它输出?

  • 标签:第一、第二、第三
  • 标签
  • 第一
  • 第二个
  • 第三名

最佳答案

你可以使用

(\w+)(?::\s*(\w+)(?:,\s*(\w+)(?:,\s*(\w+))?)?)?

Demo

关于C++ 正则表达式 : matching a label followed by comma separated values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47691982/

相关文章:

c++ - 我的动态数组在 free() 时有 SIGSEGV,但可以访问吗?

java - 如何编写一个正则表达式捕获组,它在分隔符之前匹配一个字符 3 次或 4 次?

Javascript正则表达式将网站上的所有链接从http转换为https

javascript - 如何为 node/mongo 创建一个正则表达式来查找不包含正则表达式的数据

javascript - Validate.JS - 禁止使用非 ASCII Unicode 字符

c++ - 频闪灯实现的基本对话框输入

c++ - Mac OSX 下的 SDL 中不显示图像和文本

c++ - C++ 中的 rand() 函数

c++ - 在 C++ 中返回字符串和不同 vector 数据类型的映射

java - 正则表达式问题 ^[a-zA-Z0-9]{5,10}$