Python phone 个数字的正则表达式
Python regular expression for phone numbers
我对正则表达式很陌生,寻求帮助从 HTML 文本
中解析出 phone 数字
在源站点,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"""
我试过这个模式,但无法从中看出更多
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']
非常感谢任何建议或帮助。谢谢
我建议使用这种模式:
(?:\B\+ ?49|\b0)(?: *[(-]? *\d(?:[ \d]*\d)?)? *(?:[)-] *)?\d+ *(?:[/)-] *)?\d+ *(?:[/)-] *)?\d+(?: *- *\d+)?
请参阅 regex demo. Note it is written based on 说 phone 数字以 +49
或 0
开头并在示例列表中你提供。它可能被认为是 "work in progress",因为您没有为 phone 号码提取提供更具体的规则。
图案详情
(?:\B\+ ?49|\b0)
- 一个 +
,可选的 space,49
或一个 0
,两个子字符串前面不能有单词 char
(?: *[(-]? *\d(?:[ \d]*\d)?)?
- 一个可选的子串匹配 0+ spaces,然后是一个可选的 (
或 -
,0+ spaces,一个数字然后是可选的 digits/spaces 序列,后跟数字
*(?:[)-] *)?
- 0+ spaces,然后是可选的 )
或 -
序列,后跟 0+ spaces
\d+
- 1+ 位数
*
- 0+ spaces
(?:[/)-] *)?
- /
、)
或 -
的可选序列,后跟 0+ spaces
\d+
- 1+ 位数
*(?:[/)-] *)?
- 0+ spaces 然后是 /
、)
或 -
的可选序列,后跟 0+ spaces
\d+
- 1+ 位数
(?: *- *\d+)?
- 可选序列:0+ spaces, -
, 0+ spaces, 1+ digits.
我对正则表达式很陌生,寻求帮助从 HTML 文本
中解析出 phone 数字在源站点,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"""
我试过这个模式,但无法从中看出更多
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']
非常感谢任何建议或帮助。谢谢
我建议使用这种模式:
(?:\B\+ ?49|\b0)(?: *[(-]? *\d(?:[ \d]*\d)?)? *(?:[)-] *)?\d+ *(?:[/)-] *)?\d+ *(?:[/)-] *)?\d+(?: *- *\d+)?
请参阅 regex demo. Note it is written based on +49
或 0
开头并在示例列表中你提供。它可能被认为是 "work in progress",因为您没有为 phone 号码提取提供更具体的规则。
图案详情
(?:\B\+ ?49|\b0)
- 一个+
,可选的 space,49
或一个0
,两个子字符串前面不能有单词 char(?: *[(-]? *\d(?:[ \d]*\d)?)?
- 一个可选的子串匹配 0+ spaces,然后是一个可选的(
或-
,0+ spaces,一个数字然后是可选的 digits/spaces 序列,后跟数字*(?:[)-] *)?
- 0+ spaces,然后是可选的)
或-
序列,后跟 0+ spaces\d+
- 1+ 位数*
- 0+ spaces(?:[/)-] *)?
-/
、)
或-
的可选序列,后跟 0+ spaces\d+
- 1+ 位数*(?:[/)-] *)?
- 0+ spaces 然后是/
、)
或-
的可选序列,后跟 0+ spaces\d+
- 1+ 位数(?: *- *\d+)?
- 可选序列:0+ spaces,-
, 0+ spaces, 1+ digits.