使用正则表达式从字符串中提取前缀值

时间:2012-10-06 07:31:17

标签: ruby regex

我有一个表格

的字符串
s = "something prefix1 value1 prefix2 value2 prefix1 value3 prefix2 value4"

我想使用正则表达式提取值(value1,value2等)。可以有任意数量的值/前缀对。只有两个前缀。值可能包含空格。

我尝试过像

这样的事情
/((prefix1|prefix2)(.*))+/

这不起作用,因为第一个。*匹配匹配字符串的其余部分。

我在红宝石工作。

提前致谢。

4 个答案:

答案 0 :(得分:1)

听起来我想要使用分割功能:

tokens = s.split(/\s+/)

这将为您提供由空格分隔的令牌列表。

查看红宝石食谱中的this部分。

更新:如果您绝对必须使用单个正则表达式匹配它们,这应该适合您:

/((\w+)\s+(.*?))+/

答案 1 :(得分:0)

尝试/((prefix1|prefix2)(.*?))+/

问号使它不贪婪。

答案 2 :(得分:0)

他的预期结果是什么? 如果您只想提取没有前缀的值,请尝试以下方法:

str = "something prefix1 value1 prefix2 value2 prefix1 value3 prefix2 value4"

p str.split.reject { |s| s =~ /prefix/ }

#=> ["something", "value1", "value2", "value3", "value4"]

答案 3 :(得分:0)

String#split可以拆分正则表达式:

s = "something prefix1 value1 prefix2 value2 prefix1 value3 prefix2 value4"
p s.split(/ prefix1 | prefix2 /) # ["something", "value1", "value2", "value3", "value4"]