ошибка: многократное повторение в позиции при использовании шаблона регулярного выражения - PullRequest
1 голос
/ 18 июня 2020

Я использую регулярное выражение для замены любой строки, которая появляется после слова username, за которым следует (: или ;), необязательными пробелами с одним необязательным пробелом между ними.

Я использую следующее регулярное выражение в PHP:

(?i)\bUsername\s?+(:|;)\s?+\K\S+

Однако я хотел знать, как использовать то же выражение в python, когда я получаю сообщение об ошибке: error: multiple repeat at position 17".

Ниже мой тестовый пример, и я хотел извлечь только dasdsad из всех примеров.

Любые способы добиться этого в Python?

Username:dasdsad
username ;dasdsad
username : dasdsad
username; dasdsad

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Python не поддерживает притяжательные квантификаторы или \K.

Если вы хотите заменить совпадения, вам не нужно \s?+.

Вы можете использовать \s* и \K, а также использовать regex модуль pypi и использовать regex.sub

\bUsername\s*[:;]\s*\K\S+

Regex демо | Python демонстрация

import regex

pattern = r"(?i)\bUsername\s*[:;]\s*\K\S+"

test_str = ("Username:dasdsad\n"
            "username ;dasdsad\n"
            "username : dasdsad\n"
            "username; dasdsad")

print(regex.sub(pattern, "REPLACEMENT", test_str))

Вывод

Username:REPLACEMENT
username ;REPLACEMENT
username : REPLACEMENT
username; REPLACEMENT
1 голос
/ 18 июня 2020

Используйте

(?i)\bUsername\s*[:;]\s*(\S+)

См. proof . Вместо \K используйте группу захвата, (\S+) захватит один или несколько непробельных символов в группу.

Python демонстрационный код :

import re

regex = r"(?i)\bUsername\s*[:;]\s*(\S+)"

test_str = ("Username:dasdsad\n"
    "username ;dasdsad\n"
    "username : dasdsad\n"
    "username; dasdsad")

print( re.findall(regex, test_str) )

ОБНОВЛЕНИЕ:

Для замены и сохранения части совпадения используйте

test_str = re.sub(r'(?i)(\bUsername\s*[:;]\s*)\S+', r'\1username', test_str)

Если вам нужно заменить на di git:

test_str = re.sub(r'(?i)(\bUsername\s*[:;]\s*)\S+', r'\g<1>1234', test_str)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...