我需要通过RegEx捕获一系列8位数字。
单个空格可以在数字之前,之后和某些情况下发生。在某些情况下,其他字符也随之而来。以下是最常见的变体形式,我想将其中的每一个变为12345678
:
123456789
12345678
1234567 89S
12345 678 9
123 456789
123456 789
这可能吗?
答案 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})$/