我正在阅读"潜入Python"在第6章中,作者使用正则表达式定义了一个函数,该函数将单数英语名词改为复数名词。 这是:
def plural(noun):
if re.search('[sxz]$', noun):
return re.sub('$', 'es', noun)
elif re.search('[^aeioudgkprt]h$', noun):
return re.sub('$', 'es', noun)
elif re.search('[^aeiou]y$', noun):
return re.sub('y$', 'ies', noun)
else:
return noun + 's'
我决定编写一个将单个法语名词改为复数的函数。这就是它的样子:
def plural(noun):
if re.search('[sxz]$', noun):
return re.sub('$', '', noun)
elif re.search(r'''au$|al$|ail$|
[^\bbijou\b| # exceptions
\bcaillou\b|
\bchou\b|
\bgenou\b|
\bhibou\b|
\bjoujou\b|
\bpou\b]''', noun, re.VERBOSE):
return re.sub('au$|al$|ail$', 'aux', noun)
elif re.search(r'''\bbijou\b|
\bcaillou\b|
\bchou\b|
\bgenou\b|
\bhibou\b|
\bjoujou\b|
\bpou\b''', noun, re.VERBOSE):
return re.sub('ou$', 'oux', noun)
elif re.search('eu$', noun):
return re.sub('$', 'eux', noun)
elif re.search('eau$', noun):
return re.sub('$', 'eaux', noun)
elif re.search('ou$', noun):
return re.sub('ou$', 'ous', noun)
else:
return noun + 's'
它在大多数情况下都有效,但是!由于某种原因,如果一个名词(例如:fleur)只需要添加" s" (" else"声明),它不起作用......它只是返回' fleur'但是应该返回' fleurs'。 我在可视化工具中运行代码,这就是问题所在:
elif re.search(r'''au$|al$|ail$|
[^\bbijou\b|
\bcaillou\b|
\bchou\b|
\bgenou\b|
\bhibou\b|
\bjoujou\b|
\bpou\b]''', noun, re.VERBOSE):
当我删除" [^ \ bbijou \ b | \ bcaillou \ C | \ bchou \ C | \ bgenou \ C | \ bhibou \ C | \ bjoujou \ C | \ bpou \ B]"那么"否则"部分工作。我只是想了解问题到底是什么以及如何解决它。
答案 0 :(得分:0)
^\bbijou\b
仅表示:^
与\b
(反斜杠),b
i
j
o
或{{1}不匹配的任何内容}}
因此匹配u
leur。
你的意思是:f
?