我有以下字符串:
str = "XXX host:1233455 YYY ZZZ!"
我想从此字符串中提取host:
之后的值。
Ruby中是否有使用RegExp执行此操作的最佳方法,避免多个循环? 欢迎任何解决方案。
答案 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,445
或44.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)
答案 3 :(得分:2)
您可以捕获值,例如。
str.match(/host:(\d+)/).captures.first