多次匹配序列

2024-05-19 03:06:53 发布

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

我想多次和一组人比赛

import re
re.findall(r'\\x\w{2}',"echo -e '\\x6b\\x61\\x6d\\x69' random \\x6b\\x61")
>> ['\\x6b', '\\x61', '\\x6d', '\\x69', '\\x6b', '\\x61']

它给出了一个数组的预期结果。但是

re.findall(r'(\\x\w{2})+',"echo -e '\\x6b\\x61\\x6d\\x69' random \\x6b\\x61")
>> ['\\x69', '\\x61']

即每组十六进制数的最后一个匹配。我假设拥有+将至少匹配组一次,但情况显然不是这样。我希望这会给我['\\x6b\\x61\\x6d\\x69','\\x6b\\x61']

我做错什么了


Tags: importechore情况random数组findallx61
2条回答

因为+不在组中

>>> re.findall(r'((\\x\w{2})+)',"echo -e '\\x6b\\x61\\x6d\\x69' random \\x6b\\x61")
[('\\x6b\\x61\\x6d\\x69', '\\x69'), ('\\x6b\\x61', '\\x61')]

您可以使用常规括号的非捕获版本

>>> re.findall(r'(?:\\x\w{2})+',"echo -e '\\x6b\\x61\\x6d\\x69' random \\x6b\\x61")
['\\x6b\\x61\\x6d\\x69', '\\x6b\\x61']

您可以用?:创建一个\\x\w{2}的非捕获组,以便用+重复模式,然后捕获乘以的模式,((?:\\x\w{2})+)应该捕获一个或多个连续模式作为\\x\w{2}

re.findall(r'((?:\\x\w{2})+)',"echo -e '\\x6b\\x61\\x6d\\x69' random \\x6b\\x61")

# ['\\x6b\\x61\\x6d\\x69', '\\x6b\\x61']

相关问题 更多 >

    热门问题