如何使用正则表达式提取字符串中两组字符间的第一组连续数字
正则调整方案
你原来使用的\d+[0-9]存在两个核心问题:
\d本身等价于[0-9],该表达式实际作用是匹配长度≥2的连续数字段,没有限定匹配位置- 无位置约束的情况下,字符串中所有符合长度要求的数字段都会被匹配,多段结果拼接后就会出现末尾多余数字的问题
适配需求的正则方案(匹配你的示例规则)
你的需求是提取字符串开头第一个字母后的第一组连续数字,忽略后续所有内容,直接使用带捕获组的正则即可:^[A-Za-z](\d+)
- 规则说明:
^锚定字符串开头,保证只从字符串起始位置匹配[A-Za-z]匹配开头的单个字母(如果开头可能有多个连续字母,改成[A-Za-z]+即可)(\d+)捕获后续的连续数字,遇到非数字字符自动停止,完全忽略后续所有内容
- 匹配结果取第一个捕获组的内容即可,测试你的示例全部符合要求:
- 输入
M123123123AD123→ 捕获结果123123123 - 输入
M1231231212MN23→ 捕获结果1231231212 - 输入
G12312312312DD→ 捕获结果12312312312
- 输入
如果你的正则引擎支持环视语法,也可以用无捕获组的写法直接匹配目标数字:(?<=^[A-Za-z])\d+,匹配到的结果直接就是需要的数字。
内容的提问来源于stack exchange,提问作者PCG
相关产品推荐
相关产品推荐

