我有这个链接,我声明如下:
class NewApplicationForm(forms.Form):
id = JobsModelChoiceField(queryset=Job.objects.none(), ...)
...
def __init__(self, *args, **kwargs):
super(NewApplicationForm, self).__init__(*args, **kwargs)
self.fields['id'].queryset = Job.objects.all()
问题是如何使用正则表达式仅提取href值?
谢谢!
答案 0 :(得分:6)
如果要解析HTML,可以使用Nokogiri gem而不是使用正则表达式。它更容易。
示例:
require "nokogiri"
link = "<a href=\"https://www.congress.gov/bill/93rd-congress/house-bill/11461\">H.R.11461</a>"
link_data = Nokogiri::HTML(link)
href_value = link_data.at_css("a")[:href]
puts href_value # => https://www.congress.gov/bill/93rd-congress/house-bill/11461
答案 1 :(得分:5)
您应该可以使用这样的正则表达式:
href\s*=\s*"([^"]*)"
请参阅该表达式的this Rubular example。
捕获组将为您提供URL,例如:
link = "<a href=\"https://www.congress.gov/bill/93rd-congress/house-bill/11461\">H.R.11461</a>"
match = /href\s*=\s*"([^"]*)"/.match(link)
if match
url = match[1]
end
href
与href属性匹配\s*
匹配0个或更多空白字符(这是可选的 - 如果HTML可能不是规范形式,则只需要它。)=
匹配等号\s*
再次允许使用可选空格"
匹配href网址的开头引用(
开始一个捕获组,用于提取[^"]*
匹配0个或更多非引号字符。由于必须对HTML属性中的引号进行转义,因此这将匹配所有字符,直到URL的末尾。)
结束捕获组"
匹配href属性值答案 2 :(得分:1)