字符串法术——正则表达式

什么是正则表达式?

正则表达式(regular expression):描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

简而言之:字符串的筛选规则⭕

 

 


简单匹配:

\w:匹配字母数字下划线

全部匹配:

import re
#一个字符串
charstr='# is my boyfriend'
#正则规则
regu=re.compile(r'\w')
#正则筛选
con=re.findall(regu,charstr)
print(con)

[‘i’, ‘s’, ‘m’, ‘y’, ‘b’, ‘o’, ‘y’, ‘f’, ‘r’, ‘i’, ‘e’, ‘n’, ‘d’]

单个匹配:

import re
#一个字符串
charstr='# is my boyfriend'
#正则规则
regu=re.compile(r'bo\wfr')
#正则筛选
con=re.findall(regu,charstr)
print(con)

[‘boyfr’]

\W:匹配非字母数字下划线

全部匹配:

import re
#一个字符串
charstr='a beautiful#boy$oh!'
#正则规则
regu=re.compile(r'\W')
#正则筛选
con=re.findall(regu,charstr)
print(con)

[‘ ‘, ‘#’, ‘$’, ‘!’]

单个匹配:

import re
#一个字符串
charstr='a beautiful#boy$oh!'
#正则规则
regu=re.compile(r'l\Wb')
#正则筛选
con=re.findall(regu,charstr)
print(con)

[‘l#b’]

\s:匹配空白字符

全部匹配:

import re
#一个字符串
charstr='# is my boyfriend'
#正则规则
regu=re.compile(r'\s')
#正则筛选
con=re.findall(regu,charstr)
print(con)

[‘ ‘, ‘ ‘, ‘ ‘]

单个匹配:

import re
#一个字符串
charstr='# is my boyfriend'
#正则规则
regu=re.compile(r'my\sbo')
#正则筛选
con=re.findall(regu,charstr)
print(con)

[‘my bo’]

单个匹配中:

\w,\W,\s这些只能匹配一个字符,所以左右把关要用相邻着的字符,只能空出一个位置,空出俩个位置就会什么都匹配不上。

还有很多常见的简单匹配,大致都是这样的过程,


升级规则:

[ ]的匹配:

[ ]来筛出选择

匹配[ ]中的元素(匹配第一个)

import re
#一个字符串
charstr='# is my boyfriend'
#正则规则
con=re.search(r'[avrbe]',charstr)
print(con)

<re.Match object; span=(8, 9), match=’b’>

用-来连接范围

import re
#一个字符串
charstr='# is My bOYfRIEnd'
#正则规则
con=re.search(r'[A-Z]',charstr)
print(con)

<re.Match object; span=(5, 6), match=’M’>

{ }的匹配:

{ }限定匹配重复次数

import re
#一个字符串
charstr='I have you hhat'
#正则规则
con=re.search(r'h{2}',charstr)
print(con)

<re.Match object; span=(11, 13), match=’hh’>

注:{0,1}代表重复一次或者零次

实例:匹配IP地址(摘自 小甲鱼)

 

^托字符的使用:

放后面为匹配:

import re
#一个字符串
charstr='I have you hhat'
#正则规则
con=re.search(r'[ve^]',charstr)
print(con)

<re.Match object; span=(4, 5), match=’v’>

放前面为取反

import re
#一个字符串
charstr='I have you hhat'
#正则规则
con=re.search(r'[^ve]',charstr)
print(con)

<re.Match object; span=(0, 1), match=’I’>


.*+?的使用

.:匹配万物(除了换行符)

import re
#一个字符串
charstr='I have you hhat'
#正则规则
con=re.compile(r'.')
res=re.findall(con,charstr)
print(res)

[‘I’, ‘ ‘, ‘h’, ‘a’, ‘v’, ‘e’, ‘ ‘, ‘y’, ‘o’, ‘u’, ‘ ‘, ‘h’, ‘h’, ‘a’, ‘t’]

*:匹配0个或者多个表达式

import re
#一个字符串
charstr='helovemyhathee'
#正则规则
con=re.compile(r'he*')
res=re.findall(con,charstr)
print(res)

[‘he’, ‘h’, ‘hee’]

元字符*:规定其前导字符必须在目标对象中出现零次或连续多次

即he*中,e在h后面出现0次或者无数次都可以

+:匹配1个或者多个表达式

import re
#一个字符串
charstr='helovemyhathee'
#正则规则
con=re.compile(r'he+')
res=re.findall(con,charstr)
print(res)

[‘he’, ‘hee’]

元字符+:“+”元字符规定其前导字符必须在目标对象中连续出现一次或多次

即he+中,e在h后面要出现一次或者更多即可匹配上

?:匹配前面的正则表达式

import re
#一个字符串
charstr='helovemyhathee'
#正则规则
con=re.compile(r'he?')
res=re.findall(con,charstr)
print(res)

[‘he’, ‘h’, ‘he’]

元字符?:规定其前导对象必须在目标对象中连续出现零次或一次

 


贪婪匹配与非贪婪匹配

贪婪匹配:尽可能多的匹配

import re
#一个字符串
charstr='1213322212313321'
#正则规则
con=re.compile(r'1.*1')
res=re.findall(con,charstr)
print(res)

[‘1213322212313321’]

非贪婪匹配:匹配至第一个满足的

import re
#一个字符串
charstr='1213322212313321'
#正则规则
con=re.compile(r'1.?1')
res=re.findall(con,charstr)
print(res)

[‘121’]

 


借 小甲鱼老师 的一张总结图:

这些就是常见的正则语法字符


正则表达式在线训练平台:

https://rubular.com/

https://www.regexpal.com/

 


 

 

 

 

 

发表评论