这几天因为工作需要,需要在一堆文本中提取如下信息。规则如下:
1. 提取Email地址规则(依据RFC 2822 (RFC2822))
1). 区别字符记号 "@"
Mail 本文中,“@” 的前后地址使用的字符为许可使用的1个或者多个。
2). mail 地址许可使用的字符及最大字符数
Mail 地址可以使用以下82 个字符:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789
!#$%&'*+-./=?^_{|}~
“@”在外的93个ASCII 字符中,禁止使用以下 11 个字符 :
"(),:;<>[/]
包括“@” 最多可以识别64 个字符。 超过64个字节以外的任何允许使用的字符都不能被识别作为E-mail 地址。
延伸阅读:The Elements of an Email Address
2. 提取URL地址规则(依据RFC 1738 (RFC1738))
1). 区别字符记号(这里简单讨论一般非智能手机使用规则,只支持http访问)
在以下UR L 标识后面跟随一个或多个( 后面 URL 格式中允许使用的) 字符的情况,到一个区分字符(后面URL 格式中允许使用的文字以外的任何其他字符)出现为止均为此URL 的一部分。
http://
https://
2). URL 允许使用的字符及最大字符数
允许使用以下91 个文字:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789
!#$%&'()*+,-./:;=?@[/]^_`{|}~
94个ASCII 文字中,禁止使用以下3个文字:
"<>
包括URL 区别字符最大可以识别256 个字节的字符。 超过256的任何字符URL 将不予识别。
3. 提取电话号码规则
1). 号码可以包括一个和多个以下字符“0”~“9” ,“*”和“#”。
2). 3 <= 号码长度 <= 32
3).“+”可以做为一个号码的开始,但不能计算到号码长度中。
4).“Space”, “-“, “(“, “)”,这四个字符可以穿插在一条电话号码中,但提取后必须忽略掉这些字符,这些字符同样不能计算到号码长度中。
举例如下:
Example | Message text | Anchored number | Number to dial |
1 | 01/01/2005 | not anchor | - |
2 | January 2005 | January 2005 | 2005 |
3 | *99# | *99# | *99# |
4 | 99#2* | 99#2* | 99#2* |
5 | *9# | *9# | *9# |
6 | +39 | not anchor | - |
7 | +391 | +391 | +391 |
8 | tel:+39 | not anchor | - |
9 | tel:+391 | tel: +391 | +391 |
10 | 391 091 | 391 091 | 391091 |
11 | +(0)44-8 | +(0)44-8 | +0448 |
12 | 123, 456 | 123 , 456 | Two different num: 123 and 456 |