如何使用Python的re.findall提取含特殊字符的字符串分段?
解决按空格拆分字符串并保留特殊字符的问题
你不需要用正则来做这个,直接用Python字符串自带的split()方法就可以完美实现需求:
names = ['S. Planet', 'A. Planet-World', 'Dog World', 'Dog-Cat Planet'] new_names = [x.split() for x in names] print(new_names)
运行结果就是你要的:
[['S.', 'Planet'], ['A.', 'Planet-World'], ['Dog', 'World'], ['Dog-Cat', 'Planet']]
为什么你之前的代码不行?
你用的正则r"([a-zA-Z]+)"只会匹配连续的英文字母,所以像.、-这些特殊字符会被当成非匹配内容,自然就被过滤掉了——比如S.会只提取出S,Planet-World会被拆成Planet和World(因为-不是字母,正则会跳过它,匹配前后的字母段)。
如果非要用正则实现(不推荐,没必要)
如果你坚持想用正则,那可以匹配除了空格之外的所有字符,正则表达式写成r"\S+"(\S表示非空白字符,+表示匹配一个或多个):
import re names = ['S. Planet', 'A. Planet-World', 'Dog World', 'Dog-Cat Planet'] new_names = [re.findall(r"\S+", x) for x in names] print(new_names)
这个也能得到预期结果,但显然split()方法更简单易懂,适合新手使用。
内容的提问来源于stack exchange,提问作者ducttape101
相关产品推荐
相关产品推荐

