一转眼2017又过去了1/4了,然后发现学习的东西没有跟上啊,赶紧学习一把,那就继续python的学习吧。正则表达式说白了其实就是用尽量少的代码来匹配字符。
还是来一些例子比较实际,就针对上面常用符号来实现几个例子:
#coding=utf-8
from re import findall,search,S
a = 'eastmoon502136'
b = findall('e.', a)
print b
这里.号匹配任意字符,findall的结果如下:
['ea']
显而易见这里的.号代替了a字符。修改下再看一下例子:
#coding=utf-8
from re import findall,search,S
a = 'eastmoon502136eee'
b = findall('e.', a)
print b
我们再来看一下运行结果:
['ea', 'ee']
可以看出这里以e开头的,的就是ea和ee,最后一个eee的话,被匹配了ee后,只有一个e了,所以就如上运行结果。
然后用两个点号看看效果:
#coding=utf-8
from re import findall,search,S
a = 'eastmoon502136eee'
b = findall('e..', a)
print b
运行结果如下:
['eas', 'eee']
和我们想的一模一样。
#coding=utf-8
from re import findall,search,S
a = 'eastmoon502136eee'
b = findall('e*', a)
print b
运行结果:
['e', '', '', '', '', '', '', '', '', '', '', '', '', '', 'eee', '']
*号就是匹配0次或者无限次,所以没有匹配的就是空字符了,连着的e也算一次。如上所示。
#coding=utf-8
from re import findall,search,S
a = 'eastmoon502136eee'
b = findall('e?', a)
print b
运行结果:
['e', '', '', '', '', '', '', '', '', '', '', '', '', '', 'e', 'e', 'e', '']
*号就是匹配0次或者1次,没有匹配的就是空字符了。如上所示。
#coding=utf-8
from re import findall,search,S
a = 'dfadafzzzHellozzzfjkadsjfjadszzzPythonzzzdsfadsfadsf'
b = findall('zzz.*zzz', a)
print b
运行结果如下:
['zzzHellozzzfjkadsjfjadszzzPythonzzz']
.*是查找zzz和zzz之间的一个最大的区间被包围的字符。
#coding=utf-8
from re import findall,search,S
a = 'dfadafzzzHellozzzfjkadsjfjadszzzPythonzzzdsfadsfadsf'
b = findall('zzz.*?zzz', a)
print b
运行结果如下:
['zzzHellozzz', 'zzzPythonzzz']
.*?匹配zzz开头和zzz结尾的字符串。
#coding=utf-8
from re import findall,search,S
a = 'dfadafzzzHellozzzfjkadsjfjadszzzPythonzzzdsfadsfadsf'
b = findall('zzz(.*?)zzz', a)
print b
运行结果:
['Hello', 'Python']
.*?匹配所有的zzz开头和zzz结尾的字符串不包含zzz。
此外还有其他的字符匹配。比如[A-Z][a-z][0-9], \d, \w, \W等等,那就用到了再说了。