Python正则拆分驼峰字符串时如何将所有匹配结果合并为单个列表
问题根因
当前代码在for循环内部每次都会为单个匹配结果新建一个独立列表,没有预先定义全局的结果列表存储所有匹配项,循环过程中每次生成的单元素列表互不关联,最终只能输出分散的单元素列表,无法得到整合后的完整单词列表。
修正方案
方案1:保留finditer写法
在循环外部提前初始化一个空列表,每次循环拿到匹配到的单词后,用append()方法将单词追加到这个预定义的结果列表中,循环全部执行完成后再打印结果列表即可。
修正后代码:
import re n = "SafaNeelHelloAByeSafaJasleen" patt = re.compile(r'([A-Z][a-z]*|[a-z$])') matches = patt.finditer(n) # 提前初始化空列表存储所有匹配结果 word_list = [] for match in matches: current_word = match.group() word_list.append(current_word) print(word_list)
方案2:更简洁的findall写法
正则的findall()方法会直接返回所有匹配结果组成的列表,不需要手动循环追加,代码更简洁:
import re n = "SafaNeelHelloAByeSafaJasleen" patt = re.compile(r'([A-Z][a-z]*|[a-z$])') word_list = patt.findall(n) print(word_list)
两种方案运行后都会输出预期结果:
['Safa', 'Neel', 'Hello', 'A', 'Bye', 'Safa', 'Jasleen']
注意:不要用
list作为变量名,list是Python内置的列表类型关键字,用作变量名会覆盖内置方法,引发后续代码异常。
内容的提问来源于stack exchange,提问作者Neel
相关产品推荐
相关产品推荐

