- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个这样的字符串
01084700069811461719010010285322921DA192089940088
01084700088763891719050010BM2120
那些字符串是数据矩阵字符串,我必须以这种方式拆分字符串
0108470006981146 17190100 102853229 21DA192089940088
0108470008876389 17190500 10BM2120
每个 block 以一个固定的代码开始,后面跟着数字或字符
我尝试使用正则表达式进行此操作,对于前两个 block 我没有问题,因为长度是固定的。我对第三个(和/或第四个) block 有问题。
我创建了这个正则表达式
/^(01\d{14})(?:(17\d{6}))*(?:(10\w*))*(?:(21\w*))*$/
对于这个字符串是正确的
01084700088763891719050010BM2120
Group 1. 0108470008876389 (ok)
Group 2. 17190500 (ok)
Group 3. 10BM2120 (ok)
但是对于另一个字符串
01084700069811461719010010285322921DA192089940088
正则表达式匹配
Group 1. 0108470006981146 (ok)
Group 2. 17190100 (ok)
Group 3. 10285322921DA192089940088 (no)
我无法创建能够正确匹配第三个和第四个 block 的正则表达式,因为没有固定长度的字符并且因为在第三个 block 中可能存在字符串“21”也是下一个区 block 的起始码。
可以创建一个正确匹配字符串所有部分的正则表达式。
感谢大家
最佳答案
你可以使用
^(01\d{14})(17\d{6})?(10\w{1,20})?(21\w{1,20})?$
参见 regex demo
请注意,如果您打算对其进行量化,则不必将捕获组与非捕获组包裹起来,您可以直接对捕获组进行量化。
此外,要使组可选,使用 ?
量词就足够了,因为 *
匹配 0 次或多次出现。
图案细节
^
- 字符串的开始(01\d{14})
- 第 1 组:01
和 24 位数字(17\d{6})?
- 第 2 组(可选):17
和 6 位数字(10\w{1,20})?
- 第 3 组(可选):10
和 1 到 20 个字符(21\w{1,20})?
- 第 4 组(可选):21
和 1 到 20 个字符$
- 字符串结尾。请注意,要仅匹配字母数字字符,您需要将 \w
替换为 [^\W_]
因为 \w
也匹配 _
。
关于javascript - 匹配不定长字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50854873/
是否有人遇到过 Azure 中的日志流问题,其中出现消息“欢迎,您现在已连接到日志流服务”。是否只是持续每秒发送 10 次垃圾邮件?我现在无法查看我的日志。 2022-07-07T12:48:40
是否有人遇到过 Azure 中的日志流问题,其中出现消息“欢迎,您现在已连接到日志流服务”。是否只是持续每秒发送 10 次垃圾邮件?我现在无法查看我的日志。 2022-07-07T12:48:40
我是一名优秀的程序员,十分优秀!