Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 从html表单中提取值_Regex_Sed_Cmd - Fatal编程技术网

Regex 从html表单中提取值

Regex 从html表单中提取值,regex,sed,cmd,Regex,Sed,Cmd,我有一个巨大的html文件,我试图从一个唯一的输入表单中提取一个特定的值 ... <input type="hidden" name="wpLoginToken" value="9ae61b0c5de20b418895d5301f6a1517" /> "editToken":"4087c77c53bbedbb1015946281fe8b99+\\" .... 第二次 s/"editToken":"\([^"]*\)".*/\1/ 但在这两种情况下,我都得到了整个文件 有什

我有一个巨大的html文件,我试图从一个唯一的输入表单中提取一个特定的值

...    
<input type="hidden" name="wpLoginToken" value="9ae61b0c5de20b418895d5301f6a1517" />
"editToken":"4087c77c53bbedbb1015946281fe8b99+\\"
....
第二次

s/"editToken":"\([^"]*\)".*/\1/
但在这两种情况下,我都得到了整个文件

有什么想法吗


谢谢

不要使用
sed
。如果您切换到正确的工具,这和您未来的任何web抓取都将变得更加容易。例如:

  • python
    用于该语言
  • lxml
    用于其漂亮的ulsoup解析器
  • XPath用于在HTML元素树中搜索
  • 元素树用于查看元素内部和周围
使用这些选项的程序如下所示:

#!/usr/bin/python

from lxml.html.soupparser import parse

tree = parse(file('index.html'))
# XPath: “look for an <input> element with ‘name’ attribute equal ‘wpLoginToken’”
element = tree.xpath('//input[@name="wpLoginToken"]')[0]
print(element.value)

data = element.tail.split('"')
print(data[3])


注意:在linux系统上安装以下软件包:

  • python
  • python lxml
sed-n'/[wpLogin | editToken]/{s/*“\(.*)”*/\1/p}

第一部分匹配标记,第二部分查找一对引号,引号之间有任何内容,如果您不能依赖引号,则可以将其更改为更具体的内容。

您所需要的只是-n选项和最后打印的p,您可能已经计算出其余部分,您很接近,但sed-n's/”wpLoginToken“*value=“([^“]*)”*/\1/p”会让sed感到困惑,因为您匹配了多个以前的模式,所以它会提供最大匹配,并返回:
#!/usr/bin/python

from lxml.html.soupparser import parse

tree = parse(file('index.html'))
# XPath: “look for an <input> element with ‘name’ attribute equal ‘wpLoginToken’”
element = tree.xpath('//input[@name="wpLoginToken"]')[0]
print(element.value)

data = element.tail.split('"')
print(data[3])
9ae61b0c5de20b418895d5301f6a1517
4087c77c53bbedbb1015946281fe8b99+\\
sed -n '/[wpLogin|editToken]/{s/.*".*"\(.*\)".*/\1/p}'  <file>