我需要检查一个从电子邮件中获得的8位长的文本块,并且只返回第一次匹配。
下面是我的测试用例:
Test123456789 --应该失败是因为9位数字Test23456789Test --通过了Test23456789测试--通过了13456780测试--通过了Test0123456 --因为电子邮件中的7位额外文本失败了:我已经附上了您要求的信息。如果你有什么问题,请告诉我们。-电子邮件中的额外文字应该无关紧要。
我试过:
.*(\d{8}).* --匹配倍数
.*?(\d{8}).* --只有一次匹配,但也有9位数的匹配。
.*(?<!\d)\d{8}(?!\d).* --我在另一个答案中找到了,但它返回了电子邮件中的所有文本,我只想要8位数字。
谢谢您的指导!
发布于 2018-11-15 19:28:03
您可以使用以下正则表达式:
(?!.*\d{9})\d{8}它首先对9位数字使用negative look ahead。然后它与8 digits匹配。
如果有7或9位数,这将失败。
发布于 2018-11-15 19:28:04
发布于 2018-11-15 19:31:41
您可以使用以下方法找到第一个事件:
^[\s\S]+?(?<!\d)(\d{8})(?!\d)
与此相匹配:
^断言字符串的开始[\s\S]+?匹配任何非贪婪字符(?<!\d)负查找不是一个数字(\d{8})捕获组中的8位数字(?!\d)负前瞻检查右边是什么不是一个数字或启用使点匹配工具或语言中的换行符,或将正则表达式前缀为(?s),并将[\s\S]+?替换为.+?。
您的值在第一个捕获组中。
https://stackoverflow.com/questions/53326505
复制相似问题