我有一个用于查找数据的正则表达式查询:
匹配一个 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)
它看起来似乎可以解决您的问题,但我不知道您的所有要求。