python - 替换字符之间的点
问题描述
所以我想在点之前没有空格时替换字符串中的点。我认为这可以通过正则表达式轻松完成,但我无法做到。
我有模式,我希望它们是:
h.e.ll.o w.o.r.l.d
:hello world
h.e.ll.o w.o.r.l.d
:hello world
hello. world
:hello. world
我尝试了以下模式:
\w+(\.)+\w+
\w+(\.+\w+)
\w+\.+\w+
我总是得到类似的东西:he.ll.o wo.rl.d
我正在使用 python 的re
模块来匹配和替换以下代码:
>>> re.sub(r'\w+\.+\w+', lambda x: x.group(0).replace('.', ''), 'h.e.ll.o w.o.r.l.d')
'he.llo wo.rl.d'
解决方案
在您的所有模式中,您在点之后消耗一个字符,因此在下一次迭代中没有机会将它与第一个匹配\w+
(因为它必须消耗至少 1 个单词字符)。
要修复您的方法,您可以匹配 1+ 个单词字符,然后是 1+ 个重复,.
然后是 1+ 个单词字符:
re.sub(r'\w+(?:\.+\w+)*', lambda x: x.group(0).replace('.', ''), s)
这是Python 演示。
在单词字符之间删除.
的另一种方法是
re.sub(r'\b\.\b', '', s)
请参阅此正则表达式演示。在这里,.
只有在单词字符内的情况下才匹配。
或者,您可以使用这种方法来匹配任何.
未包含空格的内容:
re.sub(r'(?<!\s)\.(?!\s)', '', 'h.e.ll.o w.o.r.l.d')
细节
(?<!\s)
- 如果在当前位置的左侧有一个空格,则匹配失败的负向后查找\.
- 一个点(?!\s)
- 如果当前位置的右侧有空格,则匹配失败的负前瞻。
推荐阅读
- reactjs - 启动 react / express 应用程序时,会启动一个额外的端口
- vue.js - 在 Nuxt JS 中使用 ESLINT 和 DEV
- javascript - ReactJS 无法使用 node.js 从后端文件夹显示图像
- python - 程序计算每行项目的税率等于 BTW
- mysql - 可变滞后长度的困难
- python - 将多个证书文件传递给 Requests.py REQUESTS_CA_BUNDLE 或 verify=
- bash - 如何通过 bash 脚本访问 .dev 文件
- ogl - 使用 OGL JS 播放 GLTF 动画
- c - 多线程程序中文件套接字描述符关闭两次错误的影响
- reactjs - 导入错误:“unsplash-js”不包含默认导出(导入为“Unsplash”)