匹配正则表达式中的15或16位数字与空格或数字之间的数字

时间:2016-08-24 14:35:05

标签: regex xml exchange-server

我一直在尝试创建匹配数字的正则表达式查询

我想要匹配的是15位或16位数字,每个数字之间可以有0个或更多空格,或-。我不想匹配字符串中间的数字,我不想匹配多行之间的数字。通过阅读,我确信我目前的实施可以简化很多。

^(\d[ -]*\d[ -]*\d[ -]*\d[ -]*\d[ -]*\d[ -]*\d[ -]*\d[ -]*\d[ -]*\d[ -]*\d[ -]*\d[ -]*\d[ -]*\d[ -]*\d\d?\s*)$

使用这个表达式,我希望匹配任何15或16位数字(只有15或16位数字),每个数字之间有任意数量的空格和/或-

例如

123456789123456
1234567891234567
1  23  4  5678--9-1----234--5 -  6

这是我发现棘手的一点。此正则表达式将用于使用XML的Exchange DLP模板。它将解析每封电子邮件并提醒任何比赛。使用regexr作为站点来验证我的正则表达式,我发现上面的查询将匹配数字,如果它是文本提交中的唯一内容,但否则不会。如果我在结尾处启用\m标记,它将正确匹配所有内容。但是在DLP模板中添加\m标志时,规则不匹配

例如以下内容不匹配

1.  /123456789123456/
2.  123456 

   123456789
3. sample1234567891234567text

这个数字不一定会在它自己的行上,并且可以包含在像

这样的短语中
'Here's your number: 123456789123456'
'Here's your number:123456789123456'

3 个答案:

答案 0 :(得分:0)

类似这样的事:(?:\d[ \-]*){15,16} 意味着可以有15到16组数字,后跟任意数量的空格或破折号

如果您需要在第一个数字前包含空格和短划线,您应该在组之前添加检查:

^[ \-]*(?:\d[ \-]*){15,16}$

或者如果你需要在更大的文本中找到这些数字(不包括更大的数字):

(?<=[^\d \-])[ \-]*(?:\d[ \-]*){15,16}(?=[^\d \-])

或相同的负面看法:

(?<![\d \-])[ \-]*(?:\d[ \-]*){15,16}(?![\d \-])

答案 1 :(得分:0)

([0-9- ]{15,16})
[0-9- ] // match numbers 0-9, space and dash
{15,16} // 15 to 16 chars

https://regex101.com/r/hX3vR6/1

答案 2 :(得分:0)

为了匹配您提供的示例,与我建议的否定示例不匹配:

(?<=(\W|^))(?:\d[ -]*){15,16}(?=(\W|$))

它使用lookbehind / lookahead来检查不遵循/前面有单词字符的数字。