正则表达式留下所需的字符串剩余和其他删除

时间:2011-02-01 07:00:23

标签: ruby regex regex-negation

在Ruby中,如果包含字符串中存在,正则表达式将除去所有字符串以外的所有字符串?我知道/[^abc]/字符,但字符串怎么样?

假设我有字符串"group=4&type_ids[]=2&type_ids[]=7&saved=1"并且想要保留模式group=\d,如果它只使用正则表达式存在于字符串中?

目前,我正在分割&,然后对生成的可枚举集合执行匹配条件=~ /group=\d/的选择。它工作正常,但我想知道正则表达式更直接地做到这一点。

4 个答案:

答案 0 :(得分:2)

简单:
part = str[/group=\d+/]

如果您只想要数字,那么:
group_str = str[/group=(\d+)/,1]

如果您只想将数字作为整数,那么:
group_num = str[/group=(\d+)/,1].to_i

警告:如果不匹配,String#[]将返回nil,并且盲目致电nil.to_i始终返回0

答案 1 :(得分:1)

您可以尝试:

$str =~ s/.*(group=\d+).*/\1/;

答案 2 :(得分:1)

通常我不会太担心复杂的正则表达式。只需将琴弦分解成更小的部分即可:

asdf = "group=4&type_ids[]=2&type_ids[]=7&saved=1"

asdf.split('&').select{ |q| q['group'] } # => ["group=4"]

否则,您可以使用正则表达式的一些不同方式。这是我倾向于使用的两种方式:

asdf.scan(/group=\d+/) # => ["group=4"]
asdf[/(group=\d+)/, 1] # => "group=4"

答案 3 :(得分:0)

尝试:

str.match(/group=\d+/)[0]