【发布时间】:2015-10-01 00:56:31
【问题描述】:
我只想按后缀分割字符串。例如,我希望能够将dord word 拆分为[dor,wor]。
虽然\wd 会搜索以d 结尾的单词。但是,这不会产生预期的结果
import re
re.split(r'\wd',"dord word")
['do', ' wo', '']
如何按后缀拆分?
【问题讨论】:
我只想按后缀分割字符串。例如,我希望能够将dord word 拆分为[dor,wor]。
虽然\wd 会搜索以d 结尾的单词。但是,这不会产生预期的结果
import re
re.split(r'\wd',"dord word")
['do', ' wo', '']
如何按后缀拆分?
【问题讨论】:
作为一种更好的方法,您可以使用re.findall 并使用r'\b(\w+)d\b' 作为您的正则表达式来查找d 之前的其余单词:
>>> re.findall(r'\b(\w+)d\b',s)
['dor', 'wor']
【讨论】:
x='dord word'
import re
print re.split(r"d\b",x)
或
print [i for i in re.split(r"d\b",x) if i] #if you dont want null strings.
试试这个。
【讨论】:
由于\w 还可以捕获数字和下划线,我将使用[a-zA-Z] 字符类定义一个仅由字母组成的单词:
print [x.group(1) for x in re.finditer(r"\b([a-zA-Z]+)d\b","dord word")]
见demo
【讨论】:
如果您想知道为什么原来的方法不起作用,
re.split(r'\wd',"dord word")
它会在“d”之前查找字母/数字/下划线的所有实例,并根据找到的内容进行拆分。所以它这样做了:
做[rd] wo[rd]
并拆分括号中的字符串,删除它们。
还要注意,这可能会在单词中间分裂,所以:
re.split(r'\wd', "said tendentious")
会将第二个单词一分为二。
【讨论】: