使用 RegEx,捕获数字组并忽略其中的任何空格的最佳方法是什么

Using RegEx, what's the best way to capture groups of digits, ignoring any whitespace in them

给定以下字符串...

ABC DEF GHI: 319 022 6543 QRS : 531 450

我正在尝试提取所有 start/end 带有数字且可能包含空格的范围,但我希望删除该空格本身。

例如,上面应该产生两个结果(因为有两个 'ranges' 符合我的目标)...

3190226543
531450

我的第一个想法是这样的,但这与字母之间的空格匹配...

([\d\s])

然后我试了这个,好像没什么效果...

([\d+\s*])

这个很接近,但它也抓住了尾随空格。此外,这会占用空格,但不会将其删除。

(\d[\d\s]+)

如果无法在单个语句中删除空格,我总是可以 post- 处理这些组,前提是我可以正确地提取它们。最近的声明很接近,但我怎么说以空格结尾,而是只有一个数字?

那么缺少的表达是什么?此外,由于有时人们只是 post 一个答案,解释 RegEx 也有助于帮助其他人弄清楚如何做到这一点。我个人不仅喜欢解决方案,还喜欢解释。 :)

注意:我知道不同平台上的 RegEx 之间可能存在一些差异,所以如果这些差异留给 reader 就好了。与语法相比,我更感兴趣的是了解正则表达式本身的基本机制。也就是说,如果有帮助,我同时使用 Swift 和 C#。

您无法在单个匹配操作中去除匹配值内的空格。作为 post-processing 步骤,您需要删除空格。

要匹配以数字开头然后可选地包含任意数量的数字或空格然后是数字的字符串,您可以使用

\d(?:[\d\s]*\d)?

详情:

  • \d - 一个数字
  • (?:[\d\s]*\d)? - 一个可选的 non-capturing 组匹配
    • [\d\s]* - 零个或多个空格/数字
    • \d - 一个数字。

参见regex demo