【问题标题】:RegEx pattern to capture comma-separated list of words用于捕获以逗号分隔的单词列表的 RegEx 模式
【发布时间】:2026-01-24 21:15:01
【问题描述】:

有人知道一个可重复的 RegEx 模式来捕获逗号分隔列表之间的单词吗?

例如:

City,State,Latitude,Longitude

// $1,$2,$3,$4

这是用于 IDE 中的查找和替换,因此大多数编程语言提供的 .split 方法不是解决方案。也请不要前瞻/环顾四周,这些都不是普遍支持的。

说明: (1) 只需要在一行中捕获逗号分隔的单词 - 而不是跨多行,(2) 示例的解决方案就足够了。

【问题讨论】:

  • 您还没有接受任何解决方案,他们没有按预期工作吗?如果不是,那么真正的问题是什么?请注意,目前尚不清楚您遇到了什么问题,只是一些要求不明确的任务。请编辑问题并添加详细信息:预计有多少字段,如果它们的数量是固定的,字段是否可以跨行,是否还有其他我们不知道的警告。 “最佳”一词只能用于我们知道其要求的解决方案。只是“给我最好的正则表达式”不是必需的。
  • @WiktorStribiżew - 要求是提供一个可重复的正则表达式模式,可以捕获 N 个逗号分隔的标记,这比我提供的解决方案更好(目前是最佳答案)。另外,您对“最佳”这个词的理解太多了……只是说“这是我目前最好的解决方案”。
  • @WJS - “为什么是正则表达式?” - 如问题“这是用于在 IDE 中查找和替换”(接受 RegEx 模式)中所述
  • 如果你想留在一行并在 VSCode 或 VS 中工作,你可以使用你的模式,你的问题是题外话,因为没有代码在这里不工作。如果您使用 NPP 或 SublimeText,在非常特殊的情况下,您的模式可能会跨越多行,您只需将 \n 添加到每个字符类中。如果可能少于四个字段,则应使用可选的非捕获组。
  • @WiktorStribiżew - “如果可能少于四个字段,您应该使用可选的非捕获组” - 可能需要捕获单词以替换为句子 - 例如 This $1 is in $2 with coordinates of $3 and $4。无论字数如何,都需要捕获。

标签: regex


【解决方案1】:

如果我们的输入这么简单,那么您的最佳解决方案就可以了,^ 可能不是必需的,这些表达式可能会起作用:

([^,]*),([^,]*),([^,]*),([^,]*)
([^,]+),([^,]+),([^,]+),([^,]+)

或者如果需要开始和结束锚点:

^([^,]*),([^,]*),([^,]*),([^,]*)$
^([^,]+),([^,]+),([^,]+),([^,]+)$

正则表达式电路

jex.im 可视化正则表达式:

【讨论】:

  • ([^,]+),? 对我不起作用。仅捕获 $1
【解决方案2】:

$1试试这个,用VsCode测试

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

【讨论】:

  • 如果重复为(\w+),(\w+),(\w+),(\w+),则回答提供的示例。但是,不处理单词之间可能存在的空格。
  • @tfmontague 确定,只是在其中添加了可选空格。
【解决方案3】:

这是我目前最好的解决方案

^([^,]*),([^,]*),([^,]*),([^,]*)$

【讨论】:

  • 也许只是作为旁注,否定字符类 [^,] 也将匹配换行符,* 将匹配 0+ 次。