我希望以这样的方式解析文本(text)
,即将带数字的括号添加到前后子字符串中。就我所了解的正则表达式而言,它通常会消耗字符串,这意味着默认情况下不能有匹配重叠,对吧?我该如何修改pattern_3
才能获得所需的输出结果?
import re
text = 'a(1)a(2)a(1)a'
pattern = '(a(?:\((\d+)\))?)'
re.findall(pattern, text)
>>> [('a(1)', '1'), ('a(2)', '2'), ('a(1)', '1'), ('a', '')]
pattern_2 = '((?:\((\d+)\))?a(?:\((\d+)\))?)'
re.findall(pattern_2, text)
>>> [('a(1)', '', '1'), ('a(2)', '', '2'), ('a(1)', '', '1'), ('a', '', '')]
pattern_3 = pattern = '((?:\((\d+)\))?a(?=(?:\((\d+)\)))?)'
re.findall(pattern_3, text)
>>> [('a', '', '1'), ('(1)a', '1', '2'), ('(2)a', '2', '1'), ('(1)a', '1', '')]
# desired output:
>>> [('a(1)', '', '1'), ('(1)a(2)', '1', '2'), ('(2)a(1)', '2', '1'), ('(1)a', '1', '')]
更新
寻找一种仅使用 re
的解决方案。
re
模块还是愿意改用regex
模块呢? - Paolore
,我清楚如何在正则表达式中实现它。 - RandomDude(?:^|(?=\())(?=((?:\((\d+)\))?a?(?:\((\d+)\))?))
- bobble bubble