She*_*nta 1 python regex python-3.x regex-greedy
我对正则表达式很陌生,正在寻求帮助从 HTML 文本中解析出电话号码
在源站点,html 标签非常扭曲,并且没有任何我可以使用的唯一选择器。下面是我要解析的可能性列表。
raw = """+49 39291 55-217
02102 7007064
0152 01680970
+49 39291 55-216
02102 3802 22
0800 333004 451-100
+49 221 9937 26950
02151-47974510
+49(0)6105 937 -539
0211/409 2268
+49(0)6105 937 -539
+49211/584-623
0211 58422 2012
+49 (9131) 7-35335
+49 521 9488 2470
+ 49-40-70 70 84 - 0
0211 17 95 99 04
02151-47974327
+49 203 28900 1121
0211 9449-2555
+49 (5 41) 9 98 -2268"""
Run Code Online (Sandbox Code Playgroud)
我试过这种模式,但无法从中了解更多
import re, requests
Phones = re.findall(re.compile(r'.*?(\(?\d{3}\D{0,3}\d{3}\D{0,3}\d{4}).*?'),raw)
phones
['102 7007064', '152 0168097', '151-4797451', '937 -539\n0211', '937 -539\n+4921', '584-623\n0211', '151-4797432']
Run Code Online (Sandbox Code Playgroud)
任何建议或帮助表示高度赞赏。谢谢
我建议使用这种模式:
(?:\B\+ ?49|\b0)(?: *[(-]? *\d(?:[ \d]*\d)?)? *(?:[)-] *)?\d+ *(?:[/)-] *)?\d+ *(?:[/)-] *)?\d+(?: *- *\d+)?
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示。值得注意的是基于写入您的评论说的电话号码开头+49或0和你提供的例子就行了。由于您没有提供更具体的电话号码提取规则,因此它可能被视为“正在进行中”。
图案详情
(?:\B\+ ?49|\b0)- a +,可选空格49或 a 0,两个子字符串前面不能有字符字符(?: *[(-]? *\d(?:[ \d]*\d)?)?- 匹配 0+ 空格的可选子字符串,然后是可选的(or -,0+ 空格,一个数字,然后是一个可选的数字/空格序列,后跟一个数字 *(?:[)-] *)?- 0+ 空格,然后是可选序列)或-后跟 0+ 空格\d+ - 1+ 位数字 * - 0+ 个空格(?:[/)-] *)?- 的可选序列/,)或-后跟 0+ 个空格\d+ - 1+ 位数字 *(?:[/)-] *)?- 0+ 个空格,然后是 , 的可选序列/,)或-后跟 0+ 个空格\d+ - 1+ 位数字(?: *- *\d+)?- 可选序列:0+ 空格、-、0+ 空格、1+ 数字。