regex - 在正则表达式中保持前瞻值
问题描述
想象一下我有字符串abcdefghi
如果我应用正则表达式
m/([a-z])([a-z])/g
对它,我得到不相交的对
ab
, cd
, ef
, gh
.
我想要的是所有重叠的对ab
, bc
, cd
, de
, ef
, fg
, gh
, hi
.
当我使用前瞻时,例如
m/([a-z])(?=[a-z])/g
我得到每对的第一个字母
a
, b
, c
, d
, e
, f
, g
, h
,但不保留前瞻本身。
我怎样才能告诉正则表达式引擎我想要第一个字母但也需要前瞻,以获得成对的字母ab
, bc
, cd
, de
, ef
, fg
, gh
, hi
?
解决方案
周围的()
前瞻是非捕获的,并且因为前瞻是 0 宽度匹配,所以您不会在结果中得到“查看”的字符。
您只需要通过使用捕获组将其包围来制作前瞻捕获的内容:
([a-z])(?=([a-z]))
附带说明一下,还有其他方法可以获得重叠对,例如使用循环到(字符串的长度 - 2)的 for 循环。您可能还想考虑这些选项。
推荐阅读
- linux - CentOS 中未设置 Bash 脚本变量
- python - Keras fit_generator() 用于长信号
- ios - 大型项目的 SwiftUI 预览超时
- c++ - SFML 打开多个窗口:不会让我一次打开两个以上的窗口
- r - 换行列标题文本,column_spec 不适用于 kable_styling
- html - 图像收缩后垂直弹性盒的横轴大小
- postgresql - 部署到 Elastic beanstalk 的 Jboss 单容器无法连接到远程数据库
- java - 为什么我的 Thread.sleep 在 CompletableFuture 中结束我的进程?
- java - 使用 java 将对象放入 S3 但没有从控制台看到任何对象
- c - 早期破坏者和命名寄存器