我一直在尝试创建匹配数字的正则表达式查询
我想要匹配的是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'
答案 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
答案 2 :(得分:0)
为了匹配您提供的示例,与我建议的否定示例不匹配:
(?<=(\W|^))(?:\d[ -]*){15,16}(?=(\W|$))
它使用lookbehind / lookahead来检查不遵循/前面有单词字符的数字。