捕获没有空格的确切数字

时间:2013-07-10 08:42:20

标签: regex

我需要通过RegEx捕获一系列8位数字。 单个空格可以在数字之前,之后和某些情况下发生。在某些情况下,其他字符也随之而来。以下是最常见的变体形式,我想将其中的每一个变为12345678

123456789
 12345678
1234567 89S
12345 678 9
123 456789
123456 789

这可能吗?

3 个答案:

答案 0 :(得分:3)

我认为像正则表达式一样:

(( )?\d){8}

足以捕获数字 - 然后我将删除空格(在进一步处理之前)作为单独的步骤。


我不确定如何严格解释OP的“单一空格”要求,但这就是为什么我将RegEx构造成接受8位数字,每个数字都可以选择以单个空格字符作为前缀。

如果它只应该匹配,如果有单个空格,而不是更多,上述工作,而“条带空白优先”或“剥离非数字优先”方法不会。

如果允许更多空格,则可以轻松将?更改为*或任何固定的上限。

答案 1 :(得分:2)

单个" regex"这是不可能的。步。如果你愿意,我可以更详细地介绍一下,但基本上正则表达式不能算是"计算" (它只能匹配指定的匹配大小,例如" 8个数字",但不能"未知数量的字符,其中8个是数字")。

您需要分两个阶段完成此操作 -

  • 首先删除空格。

  • 然后执行正则表达式匹配。

例如,在ruby中:

thingtomatch = "  12 3456  7899X"
temp = thingtomatch.squeeze(' ').strip  # => temp="1234567899X"
matched_digits = temp.match(/(\d{8}).*/)[1]

(或者,正如其他答案所示,您可以执行正则表达式匹配,然后从结果中删除空格。)

答案 2 :(得分:0)

你可以这样做,但分两步:

首先,删除非数字:

s/[^\d]//g

其次,匹配您的数字:

m/^(\d{8})$/