我知道有人问同样的问题,但我没有任何结果, 这是我的文字:
AttributeError: 'DataFrameGroupBy' object has no attribute 'quatile'
我想从中提取“ PeKPATbxnupBGgWTIg5B”。
我正在做<html>
<head>
<title>emdee five for life</title>
</head>
<body style="background-color:powderblue;">
<h1 align='center'>MD5 encrypt this string</h1><h3 align='center'>PeKPATbxnupBGgWTIg5B</h3><center><form action="" method="post">
<input type="text" name="hash" placeholder="MD5" align='center'></input>
</br>
<input type="submit" value="Submit"></input>
</form></center>
</body>
</html>
,但它不返回任何内容。
请帮助我:(
答案 0 :(得分:1)
正确的方法是使用XML / HTML解析器。
如果您的文字是
...
<h1 align='center'>MD5 encrypt this string</h1><h3 align='center'>PeKPATbxnupBGgWTIg5B
</h3><center><form action="" method="post">
...
然后
sed -n "/<h3 align='center'>/,/^<\/h3>/p" thefile
会返回
<h1 align='center'>MD5 encrypt this string</h1><h3 align='center'>PeKPATbxnupBGgWTIg5B
</h3><center><form action="" method="post">
这不是您想要的。格式/<start>/,/<end>/
与<start>
和<end>
之间的所有行都匹配。
您可以使用带有反向引用的替换来匹配所需的字符串,例如
sed -n "s/.*<h3 align='center'>\(.*\)<\/h3>.*/\1/p" thefile
返回
PeKPATbxnupBGgWTIg5B
使用支持Perl兼容正则表达式(PCRE)的grep
,您可以使用
grep -P -o "<h3 align='center'>\K.*(?=</h3>)" thefile
-P
启用与perl兼容的正则表达式-o
仅打印匹配的部分<h3 align='center'>\K
使用正向后缀,\K
用于匹配<h3 align='center'>
,但不包含在匹配项中.*
匹配任何字符(?=</h3>)
使用正向先行匹配不匹配的</h3>
答案 1 :(得分:0)
sed命令sed -n '/pattern1/,/pattern2/p
确实用于提取
在pattern1
和pattern2
之间的行(包括如果
位于单独的行中。
例如,以下测试代码:
cat <<EOS | sed -n '/pattern1/,/pattern2/p'
foo
bar
pattern1
These lines
are printed.
pattern2
baz
EOS
输出:
pattern1
These lines
are printed.
pattern2
但是,如果模式为,则上面的sed
命令不起作用
位于同一行。
此外,插入符号^
和美元符号$
匹配开始
和行尾。他们没有指出职位
匹配的子字符串。
请改用以下方法:
(不用说我不打算用sed
来解析XML文件。这
只是使用sed
提取子字符串的案例研究。)
sed -n "s/.*h3 align='center'>\([^<]*\)<\/h3.*/\1/p" thefile
模式.*h3 align='center'>\([^<]*\)<\/h3.*
与以下项匹配:
h3 align='center'
和任何前面的子字符串
字符返回到字符串的开头。<
之外的任何字符。</h3
和任何结尾的子字符串
直到行尾的字符。然后,s
(替代)命令将匹配的模式替换为
上面的第二个子字符串。用于extract
第二个子字符串
从匹配的行开始。
让我详细介绍第二个专利\([^<]*\)
。
[^<]
与<
之外的任何字符都匹配。other than <
是锚定模式匹配所必需的
就在以下子字符串</h3
之前。否则匹配
由于以下原因,可能会在下一个子字符串</h3
上运行
greedy match
。*
是用于确定重复次数的量词
前一个原子。在这种情况下,它与子字符串的匹配时间更长
由<
以外的任何字符组成的大于0的数字。\(
和\)
创建capture group
,然后
包围的子字符串可以用\n
引用(其中n是一个数字
按外观顺序)替换。希望这会有所帮助。