What regular expression can I use to find the Nᵗʰ entry in a comma-separated list?

此生再无相见时 提交于 2020-07-28 19:10:20

问题


I need a regular expression that can be used to find the Nth entry in a comma-separated list.

For example, say this list looks like this:

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

...and I wanted to find the value of the 7th entry (alpha-beta).


回答1:


My first thought would not be to use a regular expression, but to use something that splits the string into an array on the comma, but since you asked for a regex.

most regexes allow you to specify a minimum or maximum match, so something like this would probably work.

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

This is intended to match any number of character that are not a comma followed by a comma six times exactly (?:[^,]*,){6} - the ?: says to not capture - and then to match and capture any number of characters that are not a comma ([^,]+). You want to use the first capture group.

Let me know if you need more info.

EDIT: I edited the above to not capture the first part of the string. This regex works in C# and Ruby.




回答2:


You could use something like:

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

As a starting point. (Replace $m with the value of (n-1).) The content would be in capture group 2. This doesn't handle things like lists of size n, but that's just a matter of making the appropriate modifications for your situation.




回答3:


@list = split /,/ => $string;
$it = $list[6];

or just

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

Beats writing a pattern with a {6} in it every time.



来源:https://stackoverflow.com/questions/9723461/what-regular-expression-can-i-use-to-find-the-n%e1%b5%97%ca%b0-entry-in-a-comma-separated-lis

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!