php - 正则表达式匹配 kbt-y102_9999_0001v-s001r 和 kbt-y102_999a
问题描述
我正在寻找一个可以转换字符串的正则表达式
kbt-y102_9999_0001v-s001v
进入 N1v-s1v
和
kbt-y102_999a
进入 N1a
kbt-y102_ => ignore everything until first underscore
9999 => N
_0001v => 1v
-s001v => -s1v
kbt-y102_9999_0001v-s001r => N1v-s1r
kbt-y102_9999_0002r-s001v => N2r-s1v
kbt-y102_9999_0001v => N1v
kbt-y102_9999_0002r => N2r
kbt-y102_999a => Na
kbt-y102_999aa => Naa
kbt-y102_9999a => Na
kbt-y102_9999aa => Naa
我的尝试涵盖了前四种情况:((.*)_[0-9]{4}_[0-9]{3}([0-9][vr])?((-s)0{0,2}+([0-9][vr]))?
正则表达式小提琴)
但我正在努力解决999a
。
解决方案
按照您的模式,这是提取所需数据的通用正则表达式:
^[^_]*_\d+([a-z]*)(?:_0*([1-9][a-z])(?:(-[a-z])0*([1-9][a-z]))?)?
它很长,但在适当的地方只有一些可接受的通配符(令牌)。您需要将匹配替换为:
N$1$2$3$4
推荐阅读
- kubernetes - 在 GCP 上运行 Kubernetes 集群时可以使用哪些持久卷存储解决方案?
- c# - 我不明白为什么 j 变量被分配了两次
- node.js - Mongodb 和 Node.js 日期时间时区问题
- css - 将样式和 html 转换为 gmail 功能
- php - 使用带有 Laravel PHP 的 Gmail Api 读取网站上的所有 gmail 收件箱,然后回复特定的电子邮件
- sas - SAS如何使用ODS和proc报告为特定行着色
- java - 如何在Java中将变量放入字符串中?
- python-3.x - 通过提及获取 Discord 用户名和鉴别器
- python - 从熊猫数据框创建滚动率矩阵
- c# - 过滤列中具有多个值的 DATATABLE 行