有这样的数字:
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)
它没有涵盖所有可能性。我想我可以使用几个正则表达式模式来做到这一点,但我认为可以使用单个正则表达式来完成。
答案 0 :(得分:2)
如果您还想提取用字母表示的数字,可以在gsub
中使用以下正则表达式:
gsub('[(]?([0-9]{3})[)]?[. -]([A-Z0-9]{3})[. -]([A-Z0-9]{4}).*','\\1-\\2-\\3',ll)
请参阅IDEONE demo
您可以从字符类中删除所有A-Z
,以匹配没有字母的数字。
<强> REGEX 强>:
[(]?
- 可选的(
([0-9]{3})
- 3位数[)]?
- 可选的)
[. -]
- 点,空格或连字符([A-Z0-9]{3})
- 3位数或字母序列[. -]
- 点,空格或连字符([A-Z0-9]{4})
- 4位数或字母序列.*
- 到最后的任意数量的字符