我的正则表达式匹配正在获取额外的前导和尾随空格。怎么才能只抓到phone号呢?
My regex match is grabbing extra leading and trailing whitespaces. How can I only capture the phone number?
我正在使用此正则表达式从长字符串中捕获 phone 数字:
\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*
测试字符串:
asdjasjkdh 1 800 555 1234 01/01/2012 asdhajksdh 18005551234 jkas 12/11/2012 hd sample@email.com asdha jksdh asjdhjak +86 800 555 1234 sdkajs test@gmail.com lorem ipsume. I am dotminors.zszsd@gmail.ca 18005551234 SADASDD +1 800 555-1234 SSDA ASASD 1-800-555-1234 1 (800) 555-1234 asdsasdadsadasda sdada 8005551234 x5678 wkadakasd asdjsadksad (800)5551234
" 1 800 555 1234 ",
" 18005551234 ",
" +86 800 555 1234 ",
" 18005551234 ",
" +1 800 555-1234 ",
" 1-800-555-1234 ",
"1 (800) 555-1234 ",
" 8005551234 x5678 ",
" (800)5551234"
如您所见,一些数字的开头或结尾有 space。我怎样才能只获取 phone 数字部分而不必在之后再做一个单独的 trim ?
编辑: 如果我删除两端的 \s*
,它会给我一些缺少最后一位的 phone 数字。我用输出更新了我的问题:
"1 800 555 1234",
" 1800555123",
"+86 800 555 1234",
" 1800555123",
"+1 800 555-1234",
"1-800-555-1234",
"1 (800) 555-1234",
" 8005551234 x5678",
" (800)5551234"
正如您所注意到的,第二个和第四个 phone 数字在末尾缺少“4”并且仍然抓取白色 space。
除了从开头和结尾删除 \s*
之外,还从第一个字符集中删除 space,就在可选捕获组之后 - 相反,将 space 在第一个捕获组中,以确保如果第一个组不匹配,则匹配不会以任何 spaces:
开头
(?:\+?(\d{1,3}) *)?[-.(]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?
^^ ^^^
我正在使用此正则表达式从长字符串中捕获 phone 数字:
\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*
测试字符串:
asdjasjkdh 1 800 555 1234 01/01/2012 asdhajksdh 18005551234 jkas 12/11/2012 hd sample@email.com asdha jksdh asjdhjak +86 800 555 1234 sdkajs test@gmail.com lorem ipsume. I am dotminors.zszsd@gmail.ca 18005551234 SADASDD +1 800 555-1234 SSDA ASASD 1-800-555-1234 1 (800) 555-1234 asdsasdadsadasda sdada 8005551234 x5678 wkadakasd asdjsadksad (800)5551234
" 1 800 555 1234 ",
" 18005551234 ",
" +86 800 555 1234 ",
" 18005551234 ",
" +1 800 555-1234 ",
" 1-800-555-1234 ",
"1 (800) 555-1234 ",
" 8005551234 x5678 ",
" (800)5551234"
如您所见,一些数字的开头或结尾有 space。我怎样才能只获取 phone 数字部分而不必在之后再做一个单独的 trim ?
编辑: 如果我删除两端的 \s*
,它会给我一些缺少最后一位的 phone 数字。我用输出更新了我的问题:
"1 800 555 1234",
" 1800555123",
"+86 800 555 1234",
" 1800555123",
"+1 800 555-1234",
"1-800-555-1234",
"1 (800) 555-1234",
" 8005551234 x5678",
" (800)5551234"
正如您所注意到的,第二个和第四个 phone 数字在末尾缺少“4”并且仍然抓取白色 space。
除了从开头和结尾删除 \s*
之外,还从第一个字符集中删除 space,就在可选捕获组之后 - 相反,将 space 在第一个捕获组中,以确保如果第一个组不匹配,则匹配不会以任何 spaces:
(?:\+?(\d{1,3}) *)?[-.(]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?
^^ ^^^