在Ruby中提取字符串的一部分

在Ruby中提取字符串的一部分,ruby,string,parsing,string-parsing,Ruby,String,Parsing,String Parsing,我知道这是一个简单的问题,但我想用rails提取字符串的一部分。 我会像Java一样,通过知道字符串的开头和结尾字符并将其提取出来,但我想用ruby的方式来实现这一点,这就是为什么我需要您的帮助 我的字符串是: <a href="javascript:launchRemote('99999','C')">STACK OVER AND FLOW </a> 我想要引号=>99999和链接=>堆栈和流之间的数值 我应该如何在ruby中解析这个字符串

我知道这是一个简单的问题,但我想用rails提取字符串的一部分。 我会像Java一样,通过知道字符串的开头和结尾字符并将其提取出来,但我想用ruby的方式来实现这一点,这就是为什么我需要您的帮助

我的字符串是:

<a href="javascript:launchRemote('99999','C')">STACK OVER AND FLOW             </a>

我想要引号=>
99999
和链接=>
堆栈和流之间的数值

我应该如何在ruby中解析这个字符串


谢谢。

如果您的字符串中只有一个链接,则此操作应该有效

str = %{<a href="javascript:launchRemote('99999','C')">STACK OVER AND FLOW             </a>}
num = str.match(/href=".*?'(\d*)'.*?/)[1].to_i
name = str.match(/>(.*?)</)[1].strip
str=%{}
num=str.match(/href=“.*?”(\d*)”.*?/)[1]。到

name=str.match(/>(.*?)如果字符串中只有一个链接,则应该可以使用此选项

str = %{<a href="javascript:launchRemote('99999','C')">STACK OVER AND FLOW             </a>}
num = str.match(/href=".*?'(\d*)'.*?/)[1].to_i
name = str.match(/>(.*?)</)[1].strip
str=%{}
num=str.match(/href=“.*?”(\d*)”.*?/)[1]。到
name=str.match(/>(.*)如果需要解析html:

>需要“nokogiri”
>str=%q[]
>doc=Nokogiri.parse(str)
>link=doc.at('a')
>link.text
=>“堆叠并流动”
>链接['href'][/(\d+/,1]
=> "99999"
如果需要解析html:

>需要“nokogiri”
>str=%q[]
>doc=Nokogiri.parse(str)
>link=doc.at('a')
>link.text
=>“堆叠并流动”
>链接['href'][/(\d+/,1]
=> "99999"

同时获得这两种功能的方法:

str = "<a href=\"javascript:launchRemote('99999','C')\">STACK OVER AND FLOW         </a>"
num, name = str.scan(/launchRemote\('(\d+)'[^>]+>\s*(.*?)\s*</).first
# => ["99999", "STACK OVER AND FLOW"]
str=“”
num,name=str.scan(/launchRemote\('(\d+)'[^>]+>\s*(.*?)\s*[“99999”,“叠加并流动”]

一次获得这两种功能的方法:

str = "<a href=\"javascript:launchRemote('99999','C')\">STACK OVER AND FLOW         </a>"
num, name = str.scan(/launchRemote\('(\d+)'[^>]+>\s*(.*?)\s*</).first
# => ["99999", "STACK OVER AND FLOW"]
str=“”
num,name=str.scan(/launchRemote\('(\d+)'[^>]+>\s*(.*?)\s*[“99999”,“叠加并流动”]

num返回nil://对于名称,我应该如何排除>和doc.s搜索('a')。首先使用
doc.at('a')
。而不是
link.attribute('href')。value
使用
link['href']
。而不是
href.scan(/”(\d+)/)。展平
使用
href[/(\d+),1]
。我同意@the Tin Man,但只是
link['href'[\d+/]
非常感谢您的回答。要了解更多信息,请您解释一下[/(\d+/,1]是如何工作的?
/(\d+)/
是一个匹配任意数字序列的正则表达式。在
链接['href']
上使用
[/(\d+)/
(字符串),返回字符串中与使用Nokogiri的regex.+1匹配的部分,但是,不要使用
doc.search('a')。首先使用
doc.at('a')
。而不要使用
link.attribute('href')。value
使用
link['href']
。不要使用
href.scan(/'(\d+)/)。展平
。我同意@the Tin Man,但是非常感谢你的回答。为了了解更多,你能解释一下[/(\d+/,1]是如何工作的吗?
/(\d+)/
是一个正则表达式,它匹配任何数字序列。在
链接['href']
上使用
[/(\d+/]
(字符串),返回字符串中与该正则表达式匹配的部分。