为什么 Python 不拆分多个标点符号实例?

问题描述

我试图在空格处分割输入的文本,以及所有特殊字符(如标点符号),同时保留分隔符。我的 re 模式完全按照我想要的方式工作,只是它不会拆分标点符号的多个实例。 这是我的重新模式 wordsWithPunc = re.split(r'([^-\w]+)',words)

如果我有一个像“你好”这样的词,后面有两个标点符号,那么这些标点符号会被拆分,但它们仍然是同一个元素。例如 "hello,-" 将等于 "hello",",-" 但我希望它是 "hello","-"

一个例子。 My name is mud!!! 将被拆分为 "My","name","is","mud","!!!" 但我希望它是 "My","!","!"

解决方法

如果您想捕获单个非单词字符,则需要使您的模式非贪婪(删除 +),例如:

import re

words = 'My name is mud!!!'
splitted = re.split(r'([^-\w])',words)
# ['My',' ','name','is','mud','!','','']

这也会在非单词字符之间产生“空”匹配(因为您正在对每个字符进行切割),但您可以通过对结果进行后处理以删除空匹配来缓解这种情况:

splitted = [match for match in re.split(r'([^-\w])',words) if match]
# ['My','!']

如果您还想摆脱空格匹配,您可以进一步去除生成器中的空格(即 ... if match.strip() ...)。