我正在这里寻求帮助。我想写一个正则表达式来帮助我准确地找到一个7位数的字符串-不多或少。
例如此字符串中的
:1234567 RE:TKT-2744870-R6P1G0: Gentle Reminder
它应该仅返回1234567
在这个:
12345678 RE:TKT-2744870-R6P1G0: Gentle Reminder
它应该不返回任何内容。
您能帮我吗?
提前谢谢。
答案 0 :(得分:1)
正确的正则表达式应包含\d{7}
(7位数字)和2个“边界条件”,
用于两者的匹配开始和结束,以阻止片段匹配
来自更长的数字序列。
我首先想到的是比赛之前和之后都不能任何数字。
但是,正如我从您的示例中看到的那样,应该扩展这些边界条件。
一组“禁止”字符(比赛之前或之后)应
还包括-
和字母。
例如您示例数据中的2744870
仅包含7位数字(不多也不少),
但是您仍然不希望将其匹配,因为它们显然被-
字符包围。
为使正则表达式简短,我建议:
(?<![\w-])\d{7}(?![\w-])
详细信息:
(?<![\w-])
-字符char或-
的负向后查找。\d{7}
-7位数字。(?![\w-])
-字符char或-
的负向超前查找。如果您决定在两个边界条件中都扩展“禁止”字符集,
只需将它们添加到前瞻性/前瞻性的[...]
片段中即可(但-
char
应该保留在末尾,否则必须用{{1}引用)。
像\
这样的正则表达式是错误的,
因为它与任何更长数字序列中的最后个数字匹配
(无“前边界条件”)。
它还匹配两个(\d{7})[^\d]
(用2744870
字符代替),但不匹配
要匹配。
答案 1 :(得分:0)
这应该作为您的示例:
(\d{7})[^\d]
第一个匹配组包含七个数字。
或者,如注释中所建议的那样,您可以使用负数前瞻来仅匹配七个数字,而无需匹配组:
^\d{7}(?!\d)