0

如果我有一个看起来像“TEST(10,20,30)”的字符串,我怎么能从这个字符串中取出 10 个。

我试过了

/\(([^\)]+)\)/

这得到了括号的内部,但是当我尝试添加逗号时,例如

/\(([^\),]+)\)/

然后没有匹配项。

4

4 回答 4

2

在这种情况下,您要捡起的部分的图案要比您要扔掉的部分的图案简单得多。

"TEST(10,20,30)"[/\d+/] # => 10
于 2012-10-23T19:17:19.057 回答
1

那是因为您也需要告诉正则表达式匹配逗号和右括号之间的内容(或将其省略):

/\(([^),]+)/

或者

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

如您所见,您也不需要在字符类中转义括号。

于 2012-10-23T18:23:10.810 回答
1

我怎么能从这个字符串中只拉出 10 个。

使用lookaheadlookbehind

(?<=\()\d+(?=,)

这里工作

于 2012-10-23T19:20:25.400 回答
0

希望这可以指导您朝着正确的方向前进:

irb(main):001:0> str = "TEST(10,20,30)"
=> "TEST(10,20,30)"
irb(main):002:0> str =~ /\w+\(([^,]+),.+\)/
=> 0
irb(main):003:0> $~[1]
=> "10"

正则表达式这样做:
\w+
一个或多个单词字符(“TEST”)

(([^,]+)
任何非逗号的组,这将匹配从左括号到逗号的所有内容。

正则表达式的其余部分忽略其他参数,但可以对其进行修改以将它们包含在单独的组中。

于 2012-10-23T18:31:17.687 回答