首页 > 解决方案 > 提高正则表达式的效率

问题描述

给定这样的字符串:

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+实际主机名匹配。

?=;说不包括在;命名组中。

最后一个*说我不在乎接下来会发生什么。

我有一种唠叨的感觉,有一种更好的方法来编写这个正则表达式。

标签: pythonregex

解决方案


您可以省略前瞻并匹配;组的外部,因为第\S+一个捕获所有非空白字符,然后您还匹配最后一个;而不是断言它。

此外,您可以从组中省略量词*,因为重复它零次或多次它也可以匹配空字符串。

upstream-host=(?P<hostname>\S+);

正则表达式演示


推荐阅读