从Ruby中的句子中提取一个单词

时间:2015-07-14 07:44:29

标签: ruby regex string match

我有以下字符串:

str = "XXX host:1233455 YYY ZZZ!"

我想从此字符串中提取host:之后的值。

Ruby中是否有使用RegExp执行此操作的最佳方法,避免多个循环? 欢迎任何解决方案。

4 个答案:

答案 0 :(得分:3)

如果您有数字,请使用以下正则表达式:

(?<=host:)\d+

lookbehind会在host:之后找到数字。

请参阅IDEONE demo

str = "XXX host:1233455 YYY ZZZ!"
puts str.match(/(?<=host:)\d+/)

请注意,如果您想匹配字母数字而不是任何标点符号,则可以将\d+替换为\w+

此外,如果您还有内部的点或逗号,则可以使用

/(?<=host:)\d+(?:[.,]\d+)*/

它会提取4,44544.45.455等值。

<强>更新

如果您需要更通用的解决方案(特别是如果您需要在不支持look-behind的另一个平台上使用正则表达式(如在JavaScript中),请使用捕获组方法:

str.match(/\bhost:(\d+)/).captures.first

请注意,\b确保我们找到host:作为整个单词,而不是localhost:(\d+)是捕获组,其值可以通过反向引用引用,或通过Ruby中的.captures.first引用。

答案 1 :(得分:3)

str[/host:(\d+)/, 1]
# => "1233455"

答案 2 :(得分:2)

正则表达式怎么样:

host:(\S+)

您可以在这里找到demo

答案 3 :(得分:2)

您可以捕获值,例如。

str.match(/host:(\d+)/).captures.first