我需要用标点符号把文章分成几个句子,我使用下面的正则表达式:
re.split(r'[,|.|?|!]', strContent)
它确实起作用,但有一个问题,它会将以下不应该拆分的拉丁名称(如G. lucid)分隔开:
Many studies to date have described the anticancer properties of G. lucidum,
这个拉丁名字的缩写是一个大写字母,后面跟着一个点和一个空格。所以我试着把上面的正则表达式修改如下:
re.split(r'[,|(?:[^A-Z].)|?|!]', strContent)
但是,收到以下错误提示:
re.error: unbalanced parenthesis
如何修改这个正则表达式?
2条答案
按热度按时间kknvjkwl1#
您应该使用negative lookbehind,并将其放在与句尾匹配的字符集 * 之前 *。
负向后查找应该匹配只有一个大写字母的单词,这可以通过用
\b
匹配字母前的单词边界来实现。字符集内也不需要
|
,它用于匹配其他模式。rsaldnfx2#
使用纯正则表达式查找完整的句子是困难的,因为有一些边缘情况,比如缩写,你已经看到了。你应该使用NLP库,比如NLTK。