问题
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