首页 > 解决方案 > 文本块中前 8 位数字的正则表达式,不包括大于 8 位的数字

问题描述

我需要检查电子邮件中的一段文本,以查找正好为 8 位长的数字,并且只返回第一个匹配项。

这是我的测试用例:

Test123456789 - 应该失败,因为 9 位数

测试23456789测试——通过

Test23456789 测试——通过

13456780测试——通过

Test0123456 -- 失败,因为 7 位数

电子邮件中的额外文字:我已附上您要求的信息。如果您有任何问题,请告诉我们。- 电子邮件中的额外文本应该无关紧要。

我试过:
.*(\d{8}).*-匹配倍数
.*?(\d{8}).* -只有一个匹配,但它也匹配一个9位数字
.*(?<!\d)\d{8}(?!\d).*-我在另一个答案中找到,但它返回电子邮件中的所有文本,我只想要8位数字。

感谢您的任何指导!

标签: regex

解决方案


As the others have said, you can use negative look ahead and negative look behind, and remember to not include a g flag or else you'll match every occurrence of the pattern:

(?<!\d)\d{8}(?!\d)

Demo (global match)


推荐阅读