如何将组匹配提取到数组?

时间:2016-07-27 12:35:52

标签: ruby regex

我有一个字符串,如:

<?xml version="xyzt" standalone="112.0" sxcx="xcxc"?>

我想将字符串提取到数组,其中每个元素都是字符串的属性,例如[version="xyzt", standalone="112.0", sxcx="xcxc"]

我尝试使用string.scan(/\s\w+="\.*"/) do |block| puts block end,但我没有得到结果..请告诉我为什么以及如何做到这一点。

2 个答案:

答案 0 :(得分:0)

string[/(?<=\<\?xml ).*(?=\?>)/]
#⇒ 'version="xyzt" standalone="112.0" sxcx="xcxc"'

如果您需要用方括号括起来:

?[ << string[/(?<=\<\?xml ).*(?=\?>)/] << ?]
#⇒ '[version="xyzt" standalone="112.0" sxcx="xcxc"]'

获取属性的哈希值:

string[/(?<=\<\?xml ).*(?=\?>)/].split(/\s+/)
                                .map { |e| e.split('=') }
                                .to_h
#⇒ {
#  "standalone" => "\"112.0\"",
#        "sxcx" => "\"xcxc\"",
#     "version" => "\"xyzt\""
# }

答案 1 :(得分:0)

str = '<?xml version="xyzt" standalone="112.0" sxcx="xcxc"?>'

我假设您要生成数组:

['version="xyzt"', 'standalone="112.0"', 'sxcx="xcxc"']

您可以按照以下方式执行此操作:

arr = str.scan(/[a-z]+\=\S+/)
  #=> ["version=\"xyzt\"", "standalone=\"112.0\"", "sxcx=\"xcxc\"?>"] 

puts arr
# version="xyzt"
# standalone="112.0"
# sxcx="xcxc"?>