正则表达式

1. 什么是正则表达式

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或
RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

2.通配符

*				代表一个或多个字符
?				代表单个字符
.				当前目录
..				当前目录的上一级目录
[0-9]			单个字符为0~9
[a-z]			小写字母
[A-Z]			大写字母
[A-Za-z]		字母
[0-9A-Za-Z]		字母及数字
[\u4e00-\u9fa5]	中文

3. 正则表达式常用方法

3.1 match方法:
	match尝试从字符串的起始位置开始匹配;
		- 如果起始位置没有匹配成功, 返回None;
		- 如果起始位置匹配成功, 返回一个对象
		aobj = re.match(r'we', 'wetoshello')
			print(aobj)
			print(aobj.group())
		
		bObj = re.match(r'\d', '1westos')
		if bObj:
		    print(bObj.group())
			
		bObj = re.match(r'\D', '_westos')
		if bObj:
		    print(bObj.group())
3.2 findall方法:
	findall会扫描整个字符串, 获取匹配的所有内容;
	res = re.findall(r'\d\d', '阅读数为2 点赞数为10+30')
		print(res)
3.3 search方法:
	search方法会扫描整个字符串, 只返回第一个匹配成功的内容的SRE对象;
		- 如果起始位置没有匹配成功, 返回None;
		- 如果起始位置匹配成功, 返回一个对象, 通过group方法获取匹配的内容;
	resObj = re.search(r'\d', '阅读数为8+2 点赞数为10')
	if resObj:
	    print(resObj.group())
3.4 字符串匹配:
    .			匹配除了\n之外的任意字符; [.\n]
    \d			digit--(数字), 匹配一个数字字符, 等价于[0-9]
    \D			匹配一个非数字字符, 等价于[^0-9]
    \s			space(广义的空格: 空格, \t, \n, \r), 匹配单个任何的空白字符;
    \S			匹配除了单个任何的空白字符;
    \w			字母数字或者下划线, [a-zA-Z0-9_]
    \W			除了字母数字或者下划线, [^a-zA-Z0-9_]
    示例:	pattern = r'[^a-zA-Z0-9_]'
			string = "hello_1$%"
			print(re.findall(pattern, string))
3.5 匹配字符串出现次数:
	*		代表前一个字符出现0次或者无限次;    \d*,  .*
	+		代表前一个字符出现一次或者无限次;     d+
	?		代表前一个字符出现1次或者0次;   假设某些字符可省略, 也可以不省略的时候使用
	{m}		前一个字符出现m次;
	{m,}	前一个字符至少出现m次;  * == {0,}; + ==={1,}
	{m,n}	前一个字符出现m次到n次; ? === {0,1}
	^		以什么开头
		如果没有在[]里面的时候, 代表以什么开头;
		如果在[]里面的时候,代表除了...之外;
	$		以什么结尾
	示例:re.findall(r'^h.*?l{1,3}.*?d$', "hello word")
3.6 特殊字符转义:
	+, ?, (, ), *, . 有特殊含义,在匹配时要对其进行转义,在前面加上\
3.7 分组操作:
    进行分组的时候, findall方法只返回分组里面的内容;
        	
    |				匹配| 左右任意一个表达式即可
		print(re.findall(word|hello', "helloword"))
		
    (ab)			将括号中的字符作为一个分组
		print(re.findall(r'(http|https)(.+)', 'http_hello'))
		sreObj = re.search(r'(http|https)(.+)', 'http_hello')
		if sreObj:
		    group方法会返回匹配的所有内容:
		    print(sreObj.group())
		    groups方法返回分组里面的内容:
		    print(sreObj.groups())
		
    \num			引用分组第num个匹配到的字符串
		htmlStr = "<html><p>hello word</p></html>"
		pattern = r'<(\w+)><(\w+)>(.+)</\2></\1>'
		print(re.findall(pattern, htmlStr))
		print(re.findall(pattern, htmlStr)[0][2])
		
	(?P<anme>)		分组起别名
    (?P=name)		引用分组的别名
		htmlStr = "<html><p>hello word</p></html>"
		pattern = r'<(?P<FirstTag>\w+)><(?P<SecondTag>\w+)>(?P<Text>.+)' \
		          r'</(?P=SecondTag)></(?P=FirstTag)>'
		print(re.findall(pattern, htmlStr))
		sreObj = re.search(pattern, htmlStr)
		if sreObj:
		    print(sreObj.group())
		    print(sreObj.groups())
		    print(sreObj.groupdict())
		    print(sreObj.groupdict()['Text'])
3.8 字符串的替换与分离:
	s = 'I am a boy'
	s.replace('boy', 'Boy')
	re.sub(r'(I|boy)', 'someone', s)
	s2 = '1+2=3'
	re.split(r'[+=]', s2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值