我正在编写一个从许多网站上抓取博客文章的程序。我正在尝试从自由文本中提取他们的澳大利亚格式的电话号码。这已被证明是相当困难的。
以下是一些构建的博客文章示例:
示例 1:
“你好,我的名字是 Alicia,我今年 32 岁,在过去的 40 年里一直住在布里斯班。我身高 6 英寸,跑步敏捷。自 2004 年以来,我每周跑步 2-3 次。请随时拨打 +61 (04) 654 456 或尝试我的其他号码 0434 43 22 34。”
从这篇博文中,我需要提取“04654456”和“0434432234”
示例 2:
“我是乔,也喜欢跑步。身高 7 英尺,自 2004 年以来一直坚持跑步。如需培训建议,请致电 043 572-6087 或 (02) 1232 23 56。”
从这篇博文中,我需要提取“0435726087”和“0212322356”。
示例 3:
“我的名字是 Pricilla,我喜欢跑步。您可以拨打 0 434 45 45 12 联系我,但请不要在凌晨 12 点之前致电(我的客户要到 10 点到 11 点)。我的执照号码是 4335TE33,我驾驶配备全新 6 英寸轮胎的 2004 年福特 Bronco。我可以跑 28 公里,但通常每 3 或 4 公里就需要休息一下。今天给我打电话 (04) 3 445 4512"
从这篇博文中,我需要提取“0434454512”。
我提出了一个相当精细的系统,它为每个博客条目执行以下操作:
1)去除所有非数字字符,修剪并删除双空格
2) 将字符串转换为数组。所以现在我们只有一个数字数组,例如 ['0', '434', '45', '45, '12', '4335', '33', '2004', '6', '28', '3'、'4'、'04'、'34'、'832'、'234]
3)遍历数字数组并应用规则将其拼凑在一起。这段代码很臃肿而且不是很漂亮。
4) 使用 RegExp 模式验证澳大利亚移动和固定电话号码的结果
显然我已经尝试过使用正则表达式,但在这种情况下它们失败了。
我的系统大部分时间都在工作,但至少可以说代码并不漂亮。
你会怎么攻击这个?