Python regex,捕获未指定的组

2024-09-30 14:28:21 发布

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

考虑以下示例字符串:

abc1235abc53abcXX

123abc098YXabc

我想捕捉abc之间发生的群体

例如,我应该得到以下几组:

1235, 53, XX
123, 098YX

我正在尝试这个正则表达式,但不知怎么的,它没有捕获中间的文本:

(abc(.*?))+

我做错什么了?你知道吗

编辑:我需要使用regex,没有字符串拆分,因为我需要对捕获的组应用进一步的规则。你知道吗


Tags: 字符串文本编辑示例规则regex群体abc
3条回答

使用re.split

import re

s = 'abc1235abc53abcXX'

re.split('abc', s)
# ['', '1235', '53', 'XX']

请注意,您得到一个空字符串,表示第一个“abc”之前的匹配。你知道吗

具有特定正则表达式模式的方法:

import re

strings = ['abc1235abc53abcXX', '123abc098YXabc']
pat = re.compile(r'(?:abc|^)(.+?)(?=abc|$)')    # prepared pattern

for s in strings:
    items = pat.findall(s)
    print(items)
    # further processing

输出:

['1235', '53', 'XX']
['123', '098YX']

  • (?:abc|^)-匹配abc子字符串或字符串开头的未捕获组
  • (.+?)-捕获组以尽可能少地匹配任何字符序列
  • (?=abc|$)-lookahead肯定断言,确保前面匹配的项后面紧跟着abc序列或字符串的结尾$

尝试按abc拆分字符串,然后使用list理解中的if语句删除空结果,如下所示:

[r for r in re.split('abc', s) if r]

相关问题 更多 >