gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:02:45 26 4
gpt4 key购买 nike

我想编写一个正则表达式来删除字符串中的最后一个字符,如果该字符是 (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'

关于python - 正则表达式摆脱有条件的最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37273096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com