【问题标题】:How do I use a ruby regex to get a substring?如何使用 ruby​​ 正则表达式获取子字符串?
【发布时间】:2011-03-31 17:34:42
【问题描述】:

我想从字符串中获取数字,例如:

person_3
person_34
person_356
city_4
city_15

等等……

在我看来,以下应该有效:

string[/[0-9]*/]

但这总是吐出一个空字符串。

【问题讨论】:

  • string[/_.*$/][1..-1] 有效,但我仍然很好奇为什么只要求 [0-9]* 不起作用...
  • ruby -v ruby​​ 1.8.7 (2009-06-12 patchlevel 174) [i686-linux]

标签: ruby regex string substring


【解决方案1】:

[0-9]*成功匹配字符串开头的“0个或多个”数字,因此返回""[0-9]+ 将匹配“1 个或多个”数字,并按预期工作:

irb(main):001:0> x = "test 92"
=> "test 92"
irb(main):003:0> x[/\d*/]
=> ""
irb(main):005:0> x.index(/\d*/)
=> 0
irb(main):004:0> x[/\d+/]
=> "92"

【讨论】:

  • 这不是因为非贪婪匹配(它不是),而是因为 * 匹配 或更多字符。它在字符串的开头找到个数字,并返回它们。您可以通过在字符串"34_person" 上尝试相同的正则表达式来测试这一点,/[0-9]*/ 将返回两个数字。
  • 不是贪,是懒!感谢两者。
猜你喜欢
  • 2018-05-07
  • 2015-05-21
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
  • 2011-05-06
  • 2017-06-07
  • 1970-01-01
相关资源
最近更新 更多