Ruby Gsub与正则表达式
我有一个网页。HTML源包含以下文本:Ruby Gsub与正则表达式,ruby,watir,Ruby,Watir,我有一个网页。HTML源包含以下文本: <meta property="og:title" content="John"/> 约翰就是一个例子,名字可能会有所不同。 我确信og:title在文本中只出现一次。 这是我的代码: $browser.goto( url ) x = $browser.html.gsub( /^.*<meta property="og:title" content="(.+?)".>/m, '\1' ) $browser.goto(url)
<meta property="og:title" content="John"/>
约翰就是一个例子,名字可能会有所不同。
我确信og:title在文本中只出现一次。
这是我的代码:
$browser.goto( url )
x = $browser.html.gsub( /^.*<meta property="og:title" content="(.+?)".>/m, '\1' )
$browser.goto(url)
x=$browser.html.gsub(/^.*/m,“\1”)
我希望在变量x中找到John这个名字
“\1”应该给出我放在括号中的第一部分,即(.+?),即John,对吗?
还有,我用了一个点。要匹配斜杠/,有更好的方法吗?该代码将返回所有HTML,并将匹配的代码(从字符串开头到/>)替换为“John”。这就归结为“John”,后面是该meta属性的/>之后的HTML 如果您只想提取名称,并且该标记只出现一次,则可以使用以下方法:
@browser.html =~ /<meta property="og:title" content="(.+?)"/
x = $1
@browser.html=~/该代码将返回所有html,匹配的代码(从字符串开头到/>之间的所有内容)将替换为“John”。这就归结为“John”,后面是该meta属性的/>之后的HTML
如果您只想提取名称,并且该标记只出现一次,则可以使用以下方法:
@browser.html =~ /<meta property="og:title" content="(.+?)"/
x = $1
@browser.html=~/使用Watir API:
x = browser.meta.attribute_value "content"
我无法使用css
和xpath
使用Watir-API访问meta
元素:
x = browser.meta.attribute_value "content"
如果您只需要content
的值,我无法使用css
和xpath
访问meta
元素:
html = '<meta property="og:title" content="John"/>'
=> "<meta property=\"og:title\" content=\"John\"/>"
html[/property="og:title" content="([^"]+)"/, 1]
=> "John"
html=''
=> ""
html[/property=“og:title”content=“([^”]+)”/,1]
=>“约翰”
如果您不熟悉正则表达式,“([^”]+)”
可能会将您抛出。它的意思是“从第一个”
,抓取所有内容直到下一个”
。实际上,它的意思是“抓取双引号内的所有内容。如果您只想要内容的值
:
html = '<meta property="og:title" content="John"/>'
=> "<meta property=\"og:title\" content=\"John\"/>"
html[/property="og:title" content="([^"]+)"/, 1]
=> "John"
html=''
=> ""
html[/property=“og:title”content=“([^”]+)”/,1]
=>“约翰”
如果您不熟悉正则表达式,“([^”]+)”
可能会将您抛出。它的意思是“从第一个”
,抓取所有内容直到下一个”
。实际上,它的意思是“抓取双引号内的所有内容。那么,您想要变量x
中内容
属性的值吗?您试图完成什么,使用多少标记?除了简单的使用之外,你还应该使用解析器,因为只要页面发生变化,正则表达式就会严重崩溃。那么,您是在要求一种更好的方法来实现这一点,还是代码不适合您?如果是后者,那么x得到了什么?那么,您想要变量x
中content
属性的值?您试图实现什么,以及使用了多少标记?除了简单的使用之外,你还应该使用解析器,因为只要页面发生变化,正则表达式就会严重崩溃。那么,您是在要求一种更好的方法来实现这一点,还是代码不适合您?如果是后者,那么x得到了什么?我更感兴趣的是学习regexp,所以我的理想答案应该告诉我我所做的有什么错。首先使用regex是错误的,所以Zeljko的答案应该被接受。我更感兴趣的是学习regexp,因此,我的理想答案应该告诉我我所做的有什么错。首先,使用正则表达式是错误的,所以Zeljko的答案应该被接受