【问题标题】:Extracting phone number issue in R在R中提取电话号码问题
【发布时间】:2015-09-19 06:50:38
【问题描述】:

有这样的数字:

ll <- readLines(textConnection("(412) 573-7777 opt 1
563.785.1655 x1797
(567) 523-1534 x7753
(567) 483-2119 x 477
(451) 897-MALL
(342) 668-6255 ext 7
(317) 737-3377 Opt 4
(239) 572-8878 x 3
233.785.1655 x1776
(138) 761-6877 x 4
(411) 446-6626 x 14
(412) 337-3332x19
412.393.3177 x24
327.961.1757 ext.4"))

我应该写什么正则表达式:

xxx-xxx-xxxx

我试过这个:

gsub('[(]([0-9]{3})[)] ([0-9]{3})[-]([0-9]{4}).*','\\1-\\2-\\3',ll)

它并没有涵盖所有的可能性。我认为我可以使用几种正则表达式模式来完成,但我认为可以使用单个正则表达式来完成。

【问题讨论】:

  • MALL 的那个呢? MALL 不是数字。
  • @stribizhev - 1800 PIZZA 等是电话号码,字母组对应键盘上的数字。
  • @stribizhev 啊,不错。我们的想法是尽可能多地提取符合这种模式的元素。

标签: regex r


【解决方案1】:

如果您还想提取用字母表示的数字,可以在gsub 中使用以下正则表达式:

gsub('[(]?([0-9]{3})[)]?[. -]([A-Z0-9]{3})[. -]([A-Z0-9]{4}).*','\\1-\\2-\\3',ll)

IDEONE demo

您可以从字符类中删除所有A-Z,以仅匹配不带字母的数字。

正则表达式

  • [(]? - 一个可选的(
  • ([0-9]{3}) - 3 位数
  • [)]? - 一个可选的)
  • [. -] - 点、空格或连字符
  • ([A-Z0-9]{3}) - 3 位数字或字母序列
  • [. -] - 点、空格或连字符
  • ([A-Z0-9]{4}) - 4 位数字或字母序列
  • .* - 任意数量的字符到最后

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 2014-05-16
    相关资源
    最近更新 更多