问题描述
我试图在空格处分割输入的文本,以及所有特殊字符(如标点符号),同时保留分隔符。我的 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() ...
)。