如何从文本文件中提取电话号码?
x <- c(" Mr. Bean bought 2 tickets 2-613-213-4567 or 5555555555 call either one",
"43 Butter Rd, Brossard QC K0A 3P0 – 613 213 4567",
"Please contact Mr. Bean (613)2134567",
"1.575.555.5555 is his #1 number",
"7164347566"
)
对于其他语言,已经回答了这个问题(请参阅php abd常规regex),但对于R来说似乎还没有解决。
我已经搜索并找到了可能的正则表达式来查找电话号码(除了上述其他语言的正则表达式之外):http ://regexlib.com/Search.aspx?k=phone但无法在gsub
内部使用用R提取示例中的所有这些数字。
理想情况下,我们会得到类似:
[[1]]
[1] "2-613-213-4567" "5555555555"
[[2]]
[1] "613 213 4567"
[[3]]
[1] "(613)2134567"
[[4]]
[1] "1.575.555.5555"
[[5]]
[1] "7164347566"
这是我所能做到的最好的-您有多种格式,包括带空格的格式,因此正则表达式非常笼统。它只是说“寻找至少由5个字符组成的字符串,该字符串完全由数字,句点,方括号,连字符或空格组成”:
library(stringr)
str_extract_all(x, "(^| )[0-9.() -]{5,}( |$)")
输出:
[[1]]
[1] " 2-613-213-4567 " " 5555555555 "
[[2]]
[1] " 613 213 4567"
[[3]]
[1] " (613)2134567"
[[4]]
[1] "1.575.555.5555 "
[[5]]
[1] "7164347566"
前导/尾随空格可能会固定一些额外的复杂性,或者您可以在发布后对其进行固定。
更新:经过一番搜索,我找到了这个答案,我对其稍加修改以允许使用句号。在要求输入有效的电话号码方面更加严格,但似乎涵盖了您的所有示例:
str_extract_all(x, "\\(?\\d{3}\\)?[.-]? *\\d{3}[.-]? *[.-]?\\d{4}")
输出:
[[1]]
[1] "613-213-4567" "5555555555"
[[2]]
[1] "613 213 4567"
[[3]]
[1] "(613)2134567"
[[4]]
[1] "575.555.5555"
[[5]]
[1] "7164347566"
一旦您取出了and的两端,这里发现的怪兽也可以使用。仅在确实需要时使用:^
$
huge_regex = "(?:(?:\\+?1\\s*(?:[.-]\\s*)?)?(?:\\(\\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\\s*\\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\\s*(?:[.-]\\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\\s*(?:[.-]\\s*)?([0-9]{4})(?:\\s*(?:#|x\\.?|ext\\.?|extension)\\s*(\\d+))?"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句