正则表达式-恰好7位数字

时间:2018-08-26 08:45:27

标签: regex

我正在这里寻求帮助。我想写一个正则表达式来帮助我准确地找到一个7位数的字符串-不多或少。

例如此字符串中的

1234567 RE:TKT-2744870-R6P1G0: Gentle Reminder

它应该仅返回1234567

在这个:

12345678 RE:TKT-2744870-R6P1G0: Gentle Reminder

它应该不返回任何内容。

您能帮我吗?

提前谢谢。

2 个答案:

答案 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)