首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不包括大于8位数字的文本块中前8位数字的Regex。

不包括大于8位数字的文本块中前8位数字的Regex。
EN

Stack Overflow用户
提问于 2018-11-15 19:17:21
回答 4查看 705关注 0票数 1

我需要检查一个从电子邮件中获得的8位长的文本块,并且只返回第一次匹配。

下面是我的测试用例:

Test123456789 --应该失败是因为9位数字Test23456789Test --通过了Test23456789测试--通过了13456780测试--通过了Test0123456 --因为电子邮件中的7位额外文本失败了:我已经附上了您要求的信息。如果你有什么问题,请告诉我们。-电子邮件中的额外文字应该无关紧要。

我试过:

.*(\d{8}).* --匹配倍数

.*?(\d{8}).* --只有一次匹配,但也有9位数的匹配。

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

谢谢您的指导!

EN

回答 4

Stack Overflow用户

发布于 2018-11-15 19:28:03

您可以使用以下正则表达式:

代码语言:javascript
复制
(?!.*\d{9})\d{8}

它首先对9位数字使用negative look ahead。然后它与8 digits匹配。

如果有7或9位数,这将失败。

票数 0
EN

Stack Overflow用户

发布于 2018-11-15 19:28:04

对你发布的最后一个版本做了一个小改动:

尝试:.*(?<!\d)(\d{8})(?!\d).*

演示

票数 0
EN

Stack Overflow用户

发布于 2018-11-15 19:31:41

您可以使用以下方法找到第一个事件:

^[\s\S]+?(?<!\d)(\d{8})(?!\d)

与此相匹配:

  • ^断言字符串的开始
  • [\s\S]+?匹配任何非贪婪字符
  • 检查左边是什么的(?<!\d)负查找不是一个数字
  • (\d{8})捕获组中的8位数字
  • (?!\d)负前瞻检查右边是什么不是一个数字

或启用使点匹配工具或语言中的换行符,或将正则表达式前缀为(?s),并将[\s\S]+?替换为.+?

您的值在第一个捕获组中。

Regex演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53326505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档