繁体   English   中英

Python正则表达式为字符串中的所有单词添加一个字符,除了和

[英]Python regex to add a character to all words in a string except and

我希望能够使用re.sub从'foo, bar and bee'生成'foos, bars and bees'

我甚至不能只为所有单词添加's'来工作。 一旦我得到那部分,我将努力排除'和'。 我试过用"s"修饰\\b ,但它匹配单词的开头和结尾。 如果我使用'\\w*\\b'则替换整个单词。 我试图用Python文档来解决这个问题,并且(?P)(?<=...) lookbehind断言似乎可能是我所追求的,但是我很难让它们合作,这些例子有限。

这是有效的,基于替换接受可调用:

re.sub('(\w+)', lambda m: m.group(1) + 's' if m.group(1) != 'and' else 'and', 'foo, bar and bee')

它的灵感来自旧的错误报告 (倒数第二)。

编辑:更短且可能更易读的解决方案:

re.sub('(and)|(\w+)', lambda m: m.group(1) or m.group(2) + 's', 'foo, bar and bee')

它还有一个好处,就是可以更容易地将其他单词添加到例外列表中,就像评论中提出的isedev一样。

在不考虑要排除的单词的情况下,以下内容将在字符串中的所有单词的末尾添加“s”:

re.sub('([a-zA-Z]+)','\\1s','foo, bar and bee')
-> 'foos, bars ands bees'

要以更通用且更不容易出错的方式复数单词,您可能需要查看inflect包(至少对于英语)。

下面的代码将增加s向所有的字,除了单词and

>>> import re
>>> s = "foo, bar and bee "
>>> m = re.sub(r'(?!and)(\b\w+\b)', r'\1s', s)
>>> m
'foos, bars and bees '

否定前瞻断言它会匹配一个或多个单词字符但不匹配\\band\\b \\b这里,表示在单词字符和非单词字符之间匹配的单词边界。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM