我在一个变量中获取页面的源代码。
<!DOCTYPE html><html><head><title>Intro</title></head><body><a href='/name=t1.304.log'>Test</a>. </body></html>
我想从上面的行中提取t1.304.log
。
我正在使用print log_name.split(".log",1)[0]
,但它正在向我提取第一部分。
答案 0 :(得分:3)
为什么不用HTML parser解析HTML?
>>> from bs4 import BeautifulSoup
>>> data = "<!DOCTYPE html><html><head><title>Intro</title></head><body><a href='/name=t1.304.log'>Test</a>. </body></html>"
>>> BeautifulSoup(data).a["href"].split("=")[-1]
't1.304.log'
答案 1 :(得分:1)
如果您只想快速完成,可以使用split()
记录的here函数。
log_name.split("'")[1].split("=")[1]
但是,要以可重复使用的方式执行此操作,请查看beautifulsoup
等工具已编辑添加
根据您的评论,您可以这样做:
print(log_name.split(".log",1)[0].rsplit("=",1)[1] + ".log")
答案 2 :(得分:0)
import re
st = " <!DOCTYPE html><html><head><title>Intro</title></head><body><a href='/name=t1.304.log'>Test</a>. </body></html>"
mo = re.search('(t\S*log)', st)
print(mo.group())
<强>输出强>
t1.304.log
答案 3 :(得分:0)
您可以使用正则表达式(使用class AbstractException extends Exception {
public function getName() {
return array_search($this->getCode(), (new ReflectionClass($this))->getConstants());
}
}
class SyntaxException extends AbstractException {
const BAD_SYNTAX = 90;
const REQUIRED_PARAM = 91;
const REQUIRED_VALUE = 92;
const VALUE_TYPE = 93;
const VALUE_OUT_OF_BOUNDS = 94;
public function __construct ($message = "", $code = self::BAD_SYNTAX, Exception $previous = NULL) {
$script = basename($GLOBALS['argv'][0]);
echo "Invalid syntax: $message \nSee: `$script --help` for more information\n";
parent::__construct($message, $code, $previous);
}
}
// in autoload include
set_exception_handler(function(Exception $e) {
error_log(basename($GLOBALS['argv'][0]) . ';'. date('Y-m-d H:i:s') .';'. $e->getName() .';'. $e->getMessage() .';'. $e->getFile() .';'. $e->getLine() ."\n", 3, 'error.log');
exit ($e->getCode());
});
模块),假设您的字符串变量为re
:
page_source
这将为您提供所有匹配的“* .log”子字符串列表。
但是,请注意,显然不建议使用正则表达式来解析HTML - 请参阅this discussion。
事实上,不要这样做,请使用alecxe's answer。