我可以使用啥正则表达式在逗号分隔列表中查找 Nᵗʰ 条目?

Posted

技术标签:

【中文标题】我可以使用啥正则表达式在逗号分隔列表中查找 Nᵗʰ 条目?【英文标题】:What regular expression can I use to find the Nᵗʰ entry in a comma-separated list?我可以使用什么正则表达式在逗号分隔列表中查找 Nᵗʰ 条目? 【发布时间】:2012-03-15 15:57:30 【问题描述】:

我需要一个正则表达式,可用于在逗号分隔列表中查找 Nth 条目。

例如,假设此列表如下所示:

abc,def,4322,mail@mailinator.com,3321,alpha-beta,43

...我想找到第 7th 项 (alpha-beta) 的值。

【问题讨论】:

必须使用正则表达式吗? str.split(",")[N - 1] 怎么样 @Amarghosh 他可能没有使用 Python 你不想用直接的正则表达式来做。您想拆分它,或者更好的是,使用 CSV 解析模块,然后从结果列表中拉出您需要的元素。 请注意,“逗号分隔”和“逗号分隔”(就此而言,“逗号终止”)是不同的东西。您的数据只是逗号分隔,而不是逗号分隔。此外,忽略指定您希望使用它的编程语言或程序/应用程序/工具/实用程序几乎是无用的,因为正则表达式方言千差万别。 不幸的是,我使用的是软件包,而不是编程语言,因此我无法访问任何“拆分”类型的构造 - 该软件包仅允许我访问提供正则表达式.它评估 Hadoop 集群中的正则表达式,所以我认为它是由 Java 正则表达式处理程序评估的。 【参考方案1】:

我的第一个想法不是使用正则表达式,而是使用将字符串拆分为逗号上的数组的东西,但是因为您要求使用正则表达式。

大多数正则表达式允许您指定最小或最大匹配,所以这样的事情可能会起作用。

/(?:[^\,]*\,)6([^,]*)/

这旨在匹配任意数量的非逗号字符,后跟一个逗号,精确六次 (?:[^,]*,)6 - ?: 表示不捕获 - 然后匹配并捕获任意数量的非逗号字符逗号([^,]+)。您想使用第一个捕获组。

如果您需要更多信息,请告诉我。

编辑:我编辑了上面的内容以不捕获字符串的第一部分。此正则表达式适用于 C# 和 Ruby。

【讨论】:

我相信这也适用于 Java,尽管您可能需要使用 group 属性,它是 group 数组中的第二个元素。【参考方案2】:

你可以使用类似的东西:

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

作为一个起点。 (将 $m 替换为 (n-1) 的值。)内容将在捕获组 2 中。这不处理大小为 n 的列表之类的事情,但这只是根据您的情况进行适当修改的问题。

【讨论】:

【参考方案3】:
@list = split /,/ => $string;
$it = $list[6];

或者只是

$it = (split /,/ => $string)[6];

每次都写一个带有6的模式。

【讨论】:

以上是关于我可以使用啥正则表达式在逗号分隔列表中查找 Nᵗʰ 条目?的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中查找逗号分隔列表中的第 N 个项目

使用正则表达式从逗号分隔列表中删除重复项 [重复]

正则表达式查找单词的最佳匹配子集

正则表达式匹配逗号分隔的 key=value 列表,其中 value 可以包含逗号

逗号分隔的列表正则表达式 [重复]

正则表达式从逗号分隔列表中删除连续重复(整数和/或浮点数)