regex - REGEX 我可以在哪里删除字符串中的位并仍然获得恒定的分组?
问题描述
我有一个看起来像这样的字符串:
C1 V1 C2 V2 C3 V3 C4 V4.zip
其中 C1、C2 等是我可以使用其他 REGEX 来识别的常量,而 V1、V2 等是可以是任何字面意思的变量。目前我有一个正则表达式,它将完整的字符串放在对我来说很好的组中 - 例如“C1”在第 1 组中,“V1”在第 2 组中等等 -
(C1)(.*?)(C2)(.*?)(C3)(.*?)C4(.*?)(.zip)
但我想知道如果我要删除字符串的一部分,是否有办法保留这些组/匹配项,例如:
C1 V1 C2 V2 C4 V4.zip1
< 我在这里跳过了 3。
https://regex101.com/r/lpiG4H/6
如果这不可能,请告诉我:)
非常感谢!
解决方案
如果您想保留第 1 组和第 2 组并.zip
在第 3 组中捕获,您可以尝试使用交替。
那将匹配:
(C\d)(.*?(?=C\d|\.zip))|(\.zip$)
(C\d)
匹配 C 后跟捕获组中的数字(
捕获组.*?
匹配任何字符零次或多次非贪婪(?=C\d|\.zip)
断言后面是 C 后跟数字或字符串末尾的 .zip 的肯定前瞻$
)
|
或者(\.zip$)
在组中捕获.zip
并断言行尾
推荐阅读
- c - 将结构指针分配给双指针结构
- cassandra - Cassandra 客户端连接到多个地址
- python-2.7 - 使用信号将字典对象发送到线程类
- elasticsearch - Elasticsearch - 针对聚合的查询字段
- alexa - ALEXA ROS 语音命令龟甲
- python - firebase fcm 的设备注册 ID 是什么,我可以在哪里提取它们?
- reactjs - 为什么道具不传给孩子?
- apache-spark - 如何使用 Java 中的分区将 Avro 对象写入 Parquet?如何将数据附加到同一个镶木地板?
- typescript - Typescript 抱怨在不同的命名空间中有重复的 const 声明
- ios - 允许外部存储崩溃的核心数据二进制数据