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

标签 python regex

我希望能够生成 '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/

相关文章:

python 使用 math.fmod() 得到奇怪的结果

python - 如何以粗线绘制指定数据

javascript - 检测非欧洲字符

javascript - 为什么当我向其中写入波斯字符时,textarea 的值会发生变化?

python - 在 [Python] 中查找所有 TR(来自 html <table>)

python - AWS Lambda 上的 Flask HTTP 内容长度超过 10485760 字节

python - 无法找出 cv.mat.step[0] 的 Numpy 等价物

python - 如何在 PyQt4 中使用 setRowHeight 和 resizeRowToContents 调整行大小?

JavaScript 正则表达式上的转义星号

regex - 仅替换括号 (R) 内的某些字符