Python正则表达式超基础版

python的三种导入方式

import ModName #"只要导入了,就可以使用该模块的公共的函数、属性、类,使用方式为 ModName.function "
#"eg:"
import re

from modName import fuctionName #"* 表示,该模块的所有公共对象(public objects)都被导入到 当前的名称空间,也就是任何只要不是以”_”开始的东西都会被导入。 所以引用时不需要加入ModName,直接以function形式就可以"
#"eg:"
from re import findall,search,S
from re import * 

内建函数__import__() #"以上两种方式都可以导入模块,但是实际上import是使用builtin函数__import__来工作的,__import__()的参数是一个字符串"
 module = __import__(module_name) 

如果某个模块的方法或者函数容易引起歧义,建议使用import ModName方式,比如使用re.S 时,如果单独使用S,很容易引起歧义。不确定这个S是个函数,还是个变量。

python 正则表达式

使用\d+匹配纯数字


from re import findall,search,sub,S
a = 'asdfasf12345an8888fas'
b = findall('(\d+)', a)
print b

结果:[‘12345’, ‘8888’]

.符号

.符号含义:匹配任意字符\n除外,可以理解为占位符

a = "3\n"
b = "3g"
d = re.findall('3.', a)
e = re.findall('3.', b)
print d, e

结果:[ ] [‘3g’]

.没有办法匹配换行符,所以返回为空,正则表达式re.S的作用就是为了让.符号可以匹配换行符


import re
a = "3\n"
f = re.findall('3.',a, re.S)

结果:[‘3\n’]

*符号

*符号含义:匹配前一个字符0次或者无限次

a = 'xz123'
b = re.findall('x*', a)
print b

结果: [‘x’, ”, ”, ”, ”, ”]

*在’xz123’中匹配’x*’中*前一个字符,也就是x,第一个x匹配成功,返回x,之后都没有匹配到x则返回为空。

? 符号

?符号:匹配前一个字符0次或者1次

a = '489'
b = '44'
c = re.findall('4?', a)
d = re.findall('4?', b)
print c, d

结果:[‘4’, ”, ”, ”] [‘4’, ‘4’, ”]

.*组合

.*符号: 贪心算法,匹配尽量多

secret_code = 'hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'
b = re.findall('xx.*xx', secret_code)
print b

结果 [‘xxIxxfasdjifja134xxlovexx23345sdfxxyouxx’]

.*? 组合

.*? 组合:非贪心算法

secret_code = 'hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'
c = re.findall('xx.*?xx', secret_code)
print c

结果:[‘xxIxx’, ‘xxlovexx’, ‘xxyouxx’]

(.*?)组合

(.*?)组合:括号内的数据作为结果返回

s2 = 'asdfxxIxx123xxlovexxdfd'
d = re.findall('xx(.*?)xx123xx(.*?)xx',s2)
print d

结果:[(‘I’, ‘love’)]

%d符号

%d符号:替换文本

s2 = 'asdfxxIxx123xxlovexxdfd'
e = re.sub('xx(.*?)xx', 'xx%dxx' %789, s2)
print e

结果:asdfxx789xx123xx789xxdfd
%d替换 (.*?) 中匹配出来的字符,并将789作为替换字符

r’正则表达式’

python正则表达式中有时会出现r’src=”(.+?)”’ 这样的形式,后面的匹配我们已经知道了,但是前面的 r 是什么鬼, r是取消正则中的反义。

反义

有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况,这时需要用到反义:

反义字符含义
\W匹配任意不是字母,数字,下划线,汉字的字符
\S匹配任意不是空白符的字符
\D匹配任意非数字的字符
\B匹配不是单词开头或结束的位置
[^x]匹配除了x以外的任意字符
[^aeiou]匹配除了aeiou这几个字母以外的任意字符

匹配a后所有非数字的字符

a = 'abc88hfliaehiflsda2'
d = re.findall('a\D', a)
print d

结果:[‘ab’, ‘ae’]

匹配a后除了b以外的字符

a = 'abc88hfliaehiflsda2'
f = re.findall('a[^b]', a)
print f

结果:[‘ae’, ‘a2’]


正则表达式re模块学习请看
正则表达式模块学习

python引入模块参考
python有三种导入方式

python的import内置函数参考
python的内置函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值