2024-09-30 14:28:21 发布
网友
考虑以下示例字符串:
abc1235abc53abcXX 123abc098YXabc
我想捕捉abc之间发生的群体
例如,我应该得到以下几组:
1235, 53, XX 123, 098YX
我正在尝试这个正则表达式,但不知怎么的,它没有捕获中间的文本:
(abc(.*?))+
我做错什么了?你知道吗
编辑:我需要使用regex,没有字符串拆分,因为我需要对捕获的组应用进一步的规则。你知道吗
使用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|$)
$
尝试按abc拆分字符串,然后使用list理解中的if语句删除空结果,如下所示:
list
if
[r for r in re.split('abc', s) if r]
使用re.split:
请注意,您得到一个空字符串,表示第一个“abc”之前的匹配。你知道吗
具有特定正则表达式模式的方法:
输出:
(?:abc|^)
-匹配abc
子字符串或字符串开头的未捕获组(.+?)
-捕获组以尽可能少地匹配任何字符序列(?=abc|$)
-lookahead肯定断言,确保前面匹配的项后面紧跟着abc
序列或字符串的结尾$
尝试按
abc
拆分字符串,然后使用list
理解中的if
语句删除空结果,如下所示:相关问题 更多 >
编程相关推荐