我有一个像这样的字符串:
var = "Renewal Quote RQ00041233 (Payment Pending) Policy R38A014294-1"
我必须仅使用另一个字符串中包含的信息从该字符串中提取"Payment Pending"
。
以下内容:
var[/\((.*)\)/, 1]
将提取我想要的内容。我可以在要给定的字符串中包含正则表达式的字符串表示形式,并使用Regexp.new
从中构造正则表达式,但是我无法获得用作信息第二个参数的信息1
[]
。
没有第二个参数1
,
regex_string = '\((.*)\)'
var[Regexp.new(regex_string)]
获取字符串"(Payment Pending)"
而不是预期的"Payment Pending"
。
有人可以帮我吗?
答案 0 :(得分:3)
不确定要执行的操作,但可以使用其他正则表达式摆脱捕获组的作用:
var[/(?<=\().*(?=\))/]
# => "Payment Pending"
或
var[Regexp.new('(?<=\().*(?=\))')]
# => "Payment Pending"
答案 1 :(得分:1)
/\((.*)\)/
只是Regexp.new('\((.*)\)')
的简写。
String#[]
将正则表达式和捕获组作为两个单独的参数。 var[/\((.*)\)/, 1]
是var[Regex, 1]
。
要意识到的重要一点是1
是传递给var[]
而不是正则表达式的。
re = Regexp.new('\((.*)\)')
match = var[re, 1]
注意:您可能需要一个命名的捕获组而不是一个编号的捕获组。意外地在正则表达式中包含一个额外的捕获组非常容易。
答案 2 :(得分:1)
假设字符串中没有嵌套的括号,则不使用正则表达式的一种方法如下。
instance_eval "var[(i=var.index('(')+1)..var.index(')',i)-1]"
#=> "Payment Pending"
请参见String#index,尤其是对可选的第二个参数“偏移”的引用。