尝试解析如何解析字符串中剩余的电话号码。
e.g。
"Hi Han, this is Chewie, Could you give me a call on 02031234567"
"Hi Han, this is Chewie, Could you give me a call on +442031234567"
"Hi Han, this is Chewie, Could you give me a call on +44 (0) 203 123 4567"
"Hi Han, this is Chewie, Could you give me a call on 0207-123-4567"
"Hi Han, this is Chewie, Could you give me a call on 02031234567 OR +44207-1234567"
并且能够始终用其他项目(例如某些文本或链接)替换其中任何一项。
我认为这是一种正则表达式的方法(我已经做过与电子邮件类似的工作了。)
我必须
text.scan(/([^A-Z|^"]{6,})/i)
这给我留下了一个领先的空间,我可以解决如何放弃(希望得到帮助)。 是否有人们使用的标准方法?
它还会将内容放入数组中,这并不是特别有用
即。如果有多个号码。
[["02031234567"]["+44207-1234567"]]
而不是
["02031234567","+44207-1234567"]
答案 0 :(得分:5)
使用空格添加第三个用例很困难。我认为成功达到接受标准的唯一方法是将#gsub
电话连接到您的#scan
。
因此:
text.gsub(/\s+/, "").scan(/([^A-Z|^"|^\s]{6,})/i)
答案 1 :(得分:3)
以下代码将为您提取所有数字:
text.scan(/(?<=[ ])[\d \-+()]+$|(?<=[ ])[\d \-+()]+(?=[ ]\w)/)
对于您提供的示例,结果如下:
["02031234567"]
["+442031234567"]
["+44 (0) 203 123 4567"]
["0207-123-4567"]
["02031234567", "+44207-1234567"]
要理解这个正则表达式,我们匹配的是:
[\d \-+()]+
这是一个包含一个或多个数字,空格,减号,加号,打开或关闭括号的序列(按任意顺序 - 默认情况下,NB正则表达式是贪婪的,所以它将匹配下一个这些字符的数量尽可能彼此)(?<=[ ])
开头 - 注意,未捕获正面后视空间,因此确保结果中没有前导空格$
的末尾,或者|
后跟一个空格,然后是单词字符(?=[ ]\w)
(注意,此前瞻不会被捕获)答案 2 :(得分:0)
这种模式将摆脱空间,但与第三种情况不符合空格:
/([^A-Z|^"|^\s]{6,})/i
答案 3 :(得分:0)
这是我最终得到的,以防有人帮助
["+442031234567", "02031234567"]
这给了我一系列的
numbers = text.scan(/([^A-Z|^"]{6,})/i).collect{|x| x[0].strip }
real_numbers = numbers.keep_if{|n| Phony.plausible? PhonyRails.normalize_number(n, default_country_code: "GB")}
我确信有一种更优雅的方式可以做到这一点,并且你可能想要检查数字是否有可能是语音 - 例如使用辉煌的Phony宝石。
<link>
哪个应该有助于排除序列号等被识别为数字。您显然希望将国家/地区代码更改为与您相关的内容。