для значений типа https://service-dmn1-region.com/info 4169 description
, которые вы можете просто найти на ^[^-]+-([^.]+)[^\s]+ (.*)$
[harald@localhost ~]$ python3
Python 3.6.6 (default, Jul 19 2018, 14:25:17)
[GCC 8.1.1 20180712 (Red Hat 8.1.1-5)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> val = 'https://service-dmn1-region.com/info
4169 description'
>>> res = re.match('^[^-]+-([^.]+)[^\s]+ (.*)$', val)
>>> res.group(1)
'dmn1-region'
>>> res.group(2)
'4169 description'
, где ^[^-]+
соответствует началу ввода (начальное значение ^
) все, что не является апострофом -
([^-]+
), поэтому https://service
затем вы указываете, что должен следовать один апостроф, который следует за ^[⁻]+-
, и что вы хотите захватить все, что следуетследующий, который не является точкой с ([^.]+)
.(как вы уже догадались, исключение вашего шаблона с помощью ^ отменяет его, и шаблон записывается в квадратных скобках [].
Приводит нас к ^[^-]+-([^.]+)
, затем вы хотите игнорировать все до следующего пробела, так как он разделяетсядругие значения из строки, так что вы добавляете сопоставление с образцом для всего, что не является пробелом (\ s), приводя к дополнительным [^\s]+
, поэтому ^[^-]+-([^.]+)[^\s]+
, за которым вы затем хотите следовать разделителю пробелов (если ожидаете больше 1 пробела, вы можете использовать \s*
вместо фактического пробела) и добавить окончательный универсальный шаблон захвата (.*)
, который будет захватывать 4169 description
(точка обозначает все символы здесь) до концаввода $
, ведущий к ^[^-]+-([^.]+)[^\s]+ (.*)$
.