我可以使用啥正则表达式在逗号分隔列表中查找 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ᵗʰ 条目?的主要内容,如果未能解决你的问题,请参考以下文章