我需要检查电子邮件中的某个文本块,以找到正好8位数字的数字,并且只返回第一个匹配项。
这是我的测试用例:
Test123456789-应该失败,因为9位数字
Test23456789Test-通过
Test23456789测试-通过
13456780测试-通过
Test0123456-因7位数字而失败
电子邮件中的其他文字:我已附上您要求的信息。如果您有任何问题,请告诉我们。 -电子邮件中的多余文本无关紧要。
我尝试过:
.*(\d{8}).*
-匹配倍数
.*?(\d{8}).*
-仅匹配一次,但也匹配9位数字
.*(?<!\d)\d{8}(?!\d).*
-我在另一个答案中找到了答案,但是它返回了电子邮件中的所有文本,我只想要8位数字。
谢谢您的指导!
答案 0 :(得分:0)
您可以使用以下正则表达式:
(?!.*\d{9})\d{8}
首先使用negative look ahead
表示9位数字。然后它匹配8 digits
。
如果是7位或9位数字,则失败。
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以使用以下方法找到第一个匹配项:
^[\s\S]+?(?<!\d)(\d{8})(?!\d)
这将匹配:
^
声明字符串的开头[\s\S]+?
匹配任何不贪心的字符(?<!\d)
后面的否定性检查是不是数字(\d{8})
分组捕获8位数字(?!\d)
负向查找以检查右边的数字不是数字或启用使点与您的工具或语言中的换行符匹配,或在正则表达式前加上(?s)
,然后将[\s\S]+?
替换为.+?
您的值在第一个捕获组中。
答案 3 :(得分:0)