错误:使用正则表达式模式时在位置重复多次

2024-10-02 10:22:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用一个正则表达式来替换出现在单词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

Tags: 字符串表达式错误username测试用例positionerrormultiple
2条回答

使用

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

proof。与其使用\K,不如使用捕获组,(\S+)将一个或多个非空白字符捕获到一个组中

Pythondemo code

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)

如果需要替换为数字:

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

Python不支持所有格量词或\K

如果要替换匹配项,则不需要\s?+

您可以使用\s*\K,并使用regex pypi module和regex.sub

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

Regex demoPython demo

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

相关问题 更多 >

    热门问题