Skip to main content
 首页 » 编程设计

python之正则表达式摆脱有条件的最后一项

2025年05月04日15duanxz

我想编写一个正则表达式来删除字符串中的最后一个字符,如果该字符是 (s)。

但是,如果前面有另一个 (s),我想保留 (s)。

例子。

Apples 的输出应该是Apple。
Process 的输出应该是 Process。

我需要一个正则表达式,如果表达式匹配,它会捕获整个术语,但会执行部分匹配的替换。

我已经使用 s$ 去掉了最后一个字符。

请您参考如下方法:

这个问题已经被讨论过太多次了,共识总是:它太复杂了,无法通过简单的正则表达式来处理。这些示例的所有解决方案都失败了:

apples 
carrots 
process 
processes 
tennis 

解决方案是使用 morpha :

git clone https://github.com/knowitall/morpha 
cd morpha/ 
flex -i -Cfea -8 -omorpha.yy.c morpha.lex 
gcc -o morpha morpha.yy.c 
curl -s https://raw.githubusercontent.com/jhlau/predom_sense/master/lemmatiser_tools/morpha/verbstem.list > verbstem.list  

现在测试:

cat test.txt | ./morpha -c 
apple 
carrot 
process 
process 
tennis 

如果你想要一个 python 解决方案,我建议你使用 nltk。

virtualenv env-nltk 
source env-nltk/bin/activate 
pip install nltk 
python -c "import nltk; nltk.download()" # <- just get the whole thing, click "all" and then "download" on the "collections" tab 

现在一切都已下载,让我们启动 python 并使用它。

>>> from nltk.stem.wordnet import WordNetLemmatizer 
>>> lmtzr = WordNetLemmatizer() 
>>> lmtzr.lemmatize('apples') 
u'apple' 
>>> lmtzr.lemmatize('tennis') 
'tennis' 
>>> lmtzr.lemmatize('process') 
'process' 
>>> lmtzr.lemmatize('processes') 
u'process'