我正在使用ruby 2.0
及其正则表达式引擎。
给出以下字符串:
str = "one: two, three: four"
列表的长度是可变的(从0到无限)。我如何捕获它的条目?所以在这个例子中正则表达式应该匹配:
[1]:"one: two", [2]:"three: four"
这是我到目前为止所提出的:
/((\w+:\s\w+),?)*/
但它只给了我:
=> #<MatchData "one: two," 1:"one: two," 2:"one: two">
我做错了什么?
答案 0 :(得分:1)
答案 1 :(得分:1)
您不需要正则表达式。使用String#split
:
str = "one: two, three: four"
str.split(', ') # => ["one: two", "three: four"]
使用正则表达式:
str.split(/, /) # => ["one: two", "three: four"]
str.scan(/[^,]+/) # => ["one: two", " three: four"]
str.scan(/[^,]+/).map &:strip # => ["one: two", "three: four"]
答案 2 :(得分:0)
您不能在尝试时使用*重复捕获括号。它只会捕获最后一场比赛。
正如已经指出的那样,扫描方法是可行的方法。
str.scan(/(\w+:\s\w+),?/)
答案 3 :(得分:0)