我希望能够生成 'foos, bars and bees'
来自 'foo, bar and bee'
使用 re.sub。
我什至不能只在所有单词上加上“s”来工作。一旦我得到那部分,我将努力排除“和”。我试过替换 \b
与 "s"
但这匹配单词的开头和结尾。如果我使用 '\w*\b'
然后整个单词被替换。我正在尝试使用 Python 文档和 (?P)
来解决这个问题或 (?<=...)
回顾断言似乎是我所追求的,但我很难让它们合作,而且例子有限。
最佳答案
这是有效的,基于接受可调用的替换:
re.sub('(\w+)', lambda m: m.group(1) + 's' if m.group(1) != 'and' else 'and', 'foo, bar and bee')
它的灵感来自 an old bug report (倒数第二个条目)。
编辑:一个更短且可能更易读的解决方案:
re.sub('(and)|(\w+)', lambda m: m.group(1) or m.group(2) + 's', 'foo, bar and bee')
正如 isedev 在评论中所建议的那样,它还有一个好处是可以更轻松地向异常(exception)列表中添加其他单词。
关于Python正则表达式向字符串中的所有单词添加一个字符,除了和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25577802/