python - 提高正则表达式的效率
问题描述
给定这样的字符串:
upstream-status=502; upstream-scheme=http; upstream-host=dfsdf-dsfsd88.dsfsdf99.sdfsdf.dfdf.in.sdfsf; upstream-url=%2FWebObjects%2Fdsdf.woa;
我为匹配和提取上游主机而编写的正则表达式是:
upstream-host=(?P<hostname>\S+(?=;))*
?P<hostname>
允许我创建一个命名组。
与\S+
实际主机名匹配。
?=;
说不包括在;
命名组中。
最后一个*
说我不在乎接下来会发生什么。
我有一种唠叨的感觉,有一种更好的方法来编写这个正则表达式。
解决方案
您可以省略前瞻并匹配;
组的外部,因为第\S+
一个捕获所有非空白字符,然后您还匹配最后一个;
而不是断言它。
此外,您可以从组中省略量词*
,因为重复它零次或多次它也可以匹配空字符串。
upstream-host=(?P<hostname>\S+);
推荐阅读
- docker - 如何为在三节点 docker-swarm 集群上运行的 python 烧瓶应用程序挂载一个通用的 sqlite 数据库文件?
- sql - 光标的替代品
- java - 哪些 RHEL 版本支持 Amazon Corretto?
- node.js - 使用 NodeJS 更改 MongoDB 中集合的数据结构
- python - 与 findall() 一起使用的正则表达式模式来定位 3 个字母的单词
- excel - 识别具有相似格式的连续单元格系列并将其提取出来
- python - 如何让 Python 自动允许端口通过 Windows 防火墙
- node.js - Sequelize 模型不会保留 create() 中的所有属性
- spring-boot - spring boot - Tomcat服务器不以java 10开头
- python - 为什么我的程序不通过套接字发送键盘数据?