您的位置:首页 > 编程语言 > Python开发

python 正则表达式入门(匹配IP)

2015-06-18 11:29 309 查看
csdn上看到了很多讲python正则表达式的文章,但看过之后仍不明白如何使用。现以匹配IP为例,说明正则的简单使用。

推荐参考书籍:python核心编程中文版(第二版)

一、您的第一个正则表达式

简单说来,正则就是为了查找字符串用的。比如在网页有很多类似这样的信息:

IP 58.207.64.0 --- IP 58.207.67.255 地址段 共有IP记录: 1024 个

IP地址段地址:新疆 教育网直通车

58.207.64.23 58.207.64.22 58.207.64.21 58.207.64.20 58.207.64.19 58.207.64.18 58.207.64.17 58.207.64.16 58.207.64.15 58.207.64.14 58.207.64.13 58.207.64.12 58.207.64.11 58.207.64.10 58.207.64.9 58.207.64.8 58.207.64.7 58.207.64.6 58.207.64.5 58.207.64.4 58.207.64.3
58.207.64.2 58.207.64.1 58.207.64.0 更多

IP 59.75.128.0 --- IP 59.75.135.255 地址段 共有IP记录: 2048 个

IP地址段地址:新疆乌鲁木齐市 新疆大学

59.75.128.23 59.75.128.22 59.75.128.21 59.75.128.20 59.75.128.19 59.75.128.18 59.75.128.17 59.75.128.16 59.75.128.15 59.75.128.14 59.75.128.13 59.75.128.12 59.75.128.11 59.75.128.10 59.75.128.9 59.75.128.8 59.75.128.7 59.75.128.6 59.75.128.5 59.75.128.4 59.75.128.3
59.75.128.2 59.75.128.1 59.75.128.0 更多
我想找出对应的IP段该肿么办?
最简单的办法可以做全字匹配:

import re
target_str = 'IP 58.207.64.0 --- IP 58.207.67.255'  #要找到的内容
pattern = re.compile(target_str)
content = 'IP 58.207.64.0 --- IP 58.207.67.255 地址段 共有IP记录: 1024 个 '
m = pattern.match(content)
>>>m.group()
'IP 58.207.64.0 --- IP 58.207.67.255'
几条语句就能把要找的内容匹配出来了!但问题是只能匹配这一个特定的字符串,如果想匹配页面上所有这种格式字符串该怎么办了,这就需要了解正则的语法了。(语法是从python核心编程中文版(第二版)摘录的)。

二、正则表达式使用的特殊符号和字符

记号 说明 举例

2.1、用管道符号( | )匹配多个正则表达式模式

正则表达式模式 匹配的字符串

2.2、匹配任意一个单个的字符( . )

正表达式模式 匹配的字符串

f.o 在"f"和"o"中间的任何字符,如fao, f9o, f#o 等

.. 任意两个字符

.end 匹配在字符串end 前面的任意一个字符

问:我怎样才能匹配点号(dot)或句号(period)?

答:为了明确地匹配一个点号(dot)本身,你必须(在前面)使用反斜线“\”对它进行转义。

2.3、从字符串的开头或结尾或单词边界开始匹配( ^/$ /\b /\B )

正则表达式模式 匹配的字符串

^From 匹配任何以From 开始的字符串

/bin/tcsh$ 匹配任何以 /bin/tcsh 结束的字符串

^Subject: hi$ 匹配仅由 Subject: hi 组成的字符串

特殊字符 \b and \B 用来匹配单词边界。两者之间的区别是,\b 匹配的模式是一个单词边界,

就是说,与之对应的模式一定在一个单词的开头,不论这个单词的前面是有字符(该词在一个字符串

的中间),还是没有字符(该单词在一行的起始处)。同样地,\B 只匹配出现在一个单词中间的模式(即,

不在单词边界上的字符)。看下面几个例子:

RE Pattern Strings Matched

the 任何包含有"the"的字符串

\bthe 任何以"the"开始的字符串

\bthe\b 仅匹配单词 “the”

\Bthe 任意包含“the”但不以“the”开头的单词

2.4、创建字符类( [ ] )

正则表达式模式 匹配的字符串

b[aeiu] t bat, bet, bit, but

[cr][23][dp][o2] 一个包含4 个字符的字符串: 第一个字符是 “r” 或 “c”,后面是 “2”

或 “3”,再接下来是 “d” 或 “p”,最后是 “o” 或 “2“ ,例

如:c2do, r3p2, r2d2, c3po, 等等。

2.5、指定范围 ( - ) 和 否定( ^ )



正则表达式模式 匹配的字符

z.[0-9] 字符"z",后面跟任意一个字符,然后是一个十进制数字

[r-u][env-y][us] “r” “s,” “t” 或 “u” 中的任意一个字符,后面跟的是 “e,”

“n,” “v,” “w,” “x,” 或 “y”中的任意一个字符,再后面

是字符“u” 或 “s”.

[^aeiou] 一个非元音字符 (练习: 为什么我们说”非元音“, 而不说”辅音字母“?)

[^\t\n] 除TAB 制表符和换行符以外的任意一个字符

["-a] 在使用ASCII 字符集的系统中,顺序值在‘"‘ 和 “a”之间 的

任意一个字符,即,顺序号在34 和97 之间的某一个字符。

2.6 、使用闭包操作符 ( *, +, ?, {} ) 实现多次出现/重复匹配

RE Pattern Strings Matched

[dn]ot? 字符"d"或"o", 后面是一个"o", 最后是最多一个字符"t",即,do, no, dot,not

0?[1-9] 从1 到9 中的任意一位数字,前面可能还有一个"0". 例如:可以把它看

成一月到九月的数字表示形式,不管是一位数字还是两位数字的表示形式。

[0-9]{15,16} 15 或16 位数字表示,例如:信用卡号码

</?[^>]+> 匹配所有合法(和无效的)HTML 标签的字符串

2.7 、特殊字符表示字符集

正则表达式模式 匹配的字符串

\w+-\d+ 一个由字母或数字组成的字符串,和至少一个数字,两部分中间由连字符连接

[A-Za-z]\w* 第一个字符是字母,其余字符(如果存在的话),是字母或数字(它几乎

等价于Python 语言中合法的标识符[见参考练习])

\d{3}-\d{3}-\d{4} (美国)电话号码,前面带区号前缀,例如 800-555-1212

\w+@\w+\.com 简单的XXX@YYY.com 格式的电子邮件地址

2.8、 用圆括号(()) 组建组

一对圆括号(()) 和正则表达式一起使用时可以实现以下任意一个(或两个)功能:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: