Regex 从Rails 3中的JSON响应中提取数字?

Regex 从Rails 3中的JSON响应中提取数字?,regex,database,ruby-on-rails-3,json,Regex,Database,Ruby On Rails 3,Json,我在Rails 3应用程序中收到一个JSON帖子。然后我解析每个值并将它们插入到应用程序数据库中。这一切都很好,但现在我想修改接收到的值,然后再将它们插入数据库 :subject => email_payload['subject'] 正如上面的代码所示,我将“subject”的接收值插入到名为“subject”的列中 在上述示例中,接收值如下所示: Results from Example Company - Surname/Firstname/[12345] 我想做的是去掉一切,除

我在Rails 3应用程序中收到一个JSON帖子。然后我解析每个值并将它们插入到应用程序数据库中。这一切都很好,但现在我想修改接收到的值,然后再将它们插入数据库

:subject => email_payload['subject']
正如上面的代码所示,我将“subject”的接收值插入到名为“subject”的列中

在上述示例中,接收值如下所示:

Results from Example Company - Surname/Firstname/[12345]
我想做的是去掉一切,除了[]之间的数值。因此,插入到数据库中的值就是:

12345
我可以,大概,只选择0-9中的任何内容,但是如何将正则表达式添加到接收的字符串中呢

以下各项似乎都不起作用:

['subject.gsub!([0-9])']
['subject'.gsub!([0-9])]
['subject'].gsub!([0-9])

我在这里测试了Regex

因为您将.gsub应用于哈希键email返回的值(payload['subject']),所以该方法属于在结束之外链接的方法

正则表达式缺少其/分隔符。若要捕获整个组,请在/[^0-9]+/中添加+作为。^将匹配所有非数字字符,然后.gsub将用空字符串替换它们。因此,下面的模式将使关键电子邮件有效负载['subject']发生变化


由于您正在将.gsub应用于哈希键email_payload['subject']返回的值,因此该方法属于链接到结尾之外的方法

正则表达式缺少其/分隔符。若要捕获整个组,请在/[^0-9]+/中添加+作为。^将匹配所有非数字字符,然后.gsub将用空字符串替换它们。因此,下面的模式将使关键电子邮件有效负载['subject']发生变化

Ruby的示例:

这假定要选择的数字位于[]括号内,并且]位于字符串末尾

来自Ruby的示例:


这假定要选择的数字位于[]括号内,并且]位于字符串末尾

如果我使用email_payload['subject'].gsub/[^0-9]+/,如果我再次解析它,有没有办法阻止它重写“subject”?如果我在正则表达式之前或之后执行“email_payload['subject']”,它会再次过滤掉字母。@dannymcc如果不想覆盖它,请使用.gsub而不是.gsub!抱歉,我正在尝试将原始主题放在一列中,将修改后的主题放在第二列中。使用建议的代码执行此操作会覆盖两列。@dannymcc什么的两列?上面的示例只存储:subject键。如果同时需要原始版本和修改后的版本,请先存储原始版本,然后存储修改后的版本:subject_orig=>email_payload['subject'],:subject=>email_payload['subject'].gsub…对不起,我错过了你之前关于gsub的评论gsub。谢谢你的帮助!如果我使用email_payload['subject'].gsub/[^0-9]+/,如果我再次解析它,有没有办法阻止它重写“subject”?如果我在正则表达式之前或之后执行“email_payload['subject']”,它会再次过滤掉字母。@dannymcc如果不想覆盖它,请使用.gsub而不是.gsub!抱歉,我正在尝试将原始主题放在一列中,将修改后的主题放在第二列中。使用建议的代码执行此操作会覆盖两列。@dannymcc什么的两列?上面的示例只存储:subject键。如果同时需要原始版本和修改后的版本,请先存储原始版本,然后存储修改后的版本:subject_orig=>email_payload['subject'],:subject=>email_payload['subject'].gsub…对不起,我错过了你之前关于gsub的评论gsub。谢谢你的帮助!不知何故,你的例子似乎只显示了一个数字。不知何故,你的例子似乎只显示了一个数字。
email_payload['subject'] = 'Results from Example Company - Surname/Firstname/[12345]'

email_payload['subject'].gsub!(/[^0-9]+/, '')
>> "12345"
# gsub!() has mutated the value:
puts email_payload['subject']
>> 12345
"hello".gsub(/[aeiou]/, '*')                  #=> "h*ll*"
"hello".gsub(/([aeiou])/, '<\1>')             #=> "h<e>ll<o>"
"hello".gsub(/./) {|s| s.ord.to_s + ' '}      #=> "104 101 108 108 111 "
"hello".gsub(/(?<foo>[aeiou])/, '{\k<foo>}')  #=> "h{e}ll{o}"
'hello'.gsub(/[eo]/, 'e' => 3, 'o' => '*')    #=> "h3ll*"
"Results from Example Company - Surname/Firstname/[12345]".
   scan(/\[(\d*)\]$/).
   flatten
>> ["12345"]