我正在尝试识别以下类型的电话号码输入:
虽然我的正则表达式:(?:\d+\s*)+
可以识别第一个2个样本值,但它会将最后3个样本值识别为每一行中的多个匹配项,而不是识别整个数字。
如何修改它以支持多个破折号和/或空格,并且仍将其识别为1个整数而不是多个匹配项?
答案 0 :(得分:4)
您可以使用此正则表达式:
^\+?\d+(?:[\s-]\d+)*\b
RegEx详细信息:
^\+?
:在开始时匹配可选的+
\d+
:匹配1个以上的数字(?:[\s-]\d+)*
:匹配0个或多个以空格或-
开头且后跟1+个数字的组$
:结尾(由单词边界替换,就好像有尾随空格,该匹配项将丢失。)答案 1 :(得分:1)
这应该有效:
(?:[\d +-]+)+
答案 2 :(得分:1)
这将根据您的要求工作(如果有尾随空格,则此正则表达式将忽略。)
正则表达式:'^(?:[\ d +-] +)\ b'
答案 3 :(得分:1)
另一种选择是使用alternation来匹配10个没有前导加号的数字,或者使用+
来匹配模式,并使用可选的空格或连字符:
(?:\d{10}|\+\d{2}[- ]?\d{3}-?\d{5})\b
这将匹配:
(?:
非捕获组
\d{10}
匹配10位数字|
或\+\d{2}[-\s]?\d{3}-?\d{5}
匹配+
,2位数字,可选的空格字符或-
,3位数字,可选-
,5位数字)\b
关闭非捕获组和单词边界如果您的语言支持否定性回首,则可以在(?<!\S)
之前加前缀,以检查之前的字符不是非空格字符。