从正则表达式结果中删除空格

从正则表达式结果中删除空格

我有一个用于查找数据的正则表达式查询:

匹配一个 9 位数字(不多不少),其中一些数字之间以空格或 分隔-

(?:\d{9}\s)|(\d{3}[ -]\d{3}[ -]\d{3})

我对结果的问题是(?:\d{9}\s)返回尾随空格字符,制表符或新行 - 但它阻止从 10 位数字序列返回 9 位结果。

我该如何改变这一点,要么删除结果中的空格,要么只拾取\d{9}(同时不从 10 位或更多位数字中返回 9 位数字)?

答案1

使用单词边界:

(?:\d{9}\b)|(\d{3}[ -]\d{3}[ -]\d{3})
//   ___^^

根据评论,OP 之前还需要一个单词边界:

(?:\b\d{9}\b)|(\d{3}[ -]\d{3}[ -]\d{3})

另一部分可能的替代方案是:

(?:\b\d{9}\b)|\b(\d{3}[ -]\d{3}[ -]\d{3})\b

整个正则表达式变成:

\b(?:\d{9}|(\d{3}[ -]\d{3}[ -]\d{3}))\b

答案2

如果更改\s(?=\s),则为正向前瞻:

(?:\d{9})(?=\s)

它看起来似乎可以解决您的问题,但我不知道您的所有要求。

相关内容