开始行定位符^
结束行定位符&
. | 匹配除了换行符以外的任意字符 |
---|---|
\w | 匹配字母或数字或下划线或汉字 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
? | 匹配前面的字符0次或者一次 |
---|---|
+ | 匹配前面的字符一次或者多次 |
* | 匹配前面字符0次或者多次 |
{n} | 匹配前面的字符n次 |
{n,} | 匹配前面的字符至少n次 |
{n,m} | 匹配起码面的字符至少n次,最多m次 |
就是说匹配一个未知的一个元组集合该怎么办—》使用中括号
比如匹配0123456789的集合就可以用[0-9]
匹配u、i、o的集合就可以用[uio]
匹配任意一个汉字[\u4e00-\u9fa5]
匹配多个[\u4e00-\u9fa5] +
在中括号里面使用^ 就可以了
^ 表示匹配字符串的开始位置 (例外 用在中括号中[ ] 时,可以理解为取反,表示不匹配括号中字符串)
比如不匹配0123456789的集合就可以用[^0-9]
不匹配u、i、o的集合就可以用[^uio]
|
比如身份证是15位或者18位 如果是18位,前面17位都是数字,后面一位可能是X或者x或者数字
(^\d{15}$)|(^\d{17}$)|(^\d{18}$)|(\d|X|x)$
改变作用域的范围
比如(thir|four)th
不使用用小阔号匹配的是 thir 或者是fourth
使用用小阔号匹配的是 thirth 或者是fourth
1.匹配的不是一个字母
‘[^a-zA-Z]’
2.匹配的单词要用没开头
错误写法–》‘\bm\w*\b’ 因为转化为模式字符串不能直接用要转义
正确写法—》‘\bm\w*\b’ 由于模式字符串可能需要大量的反斜杠和特殊字符 ,所以可以使用另一种写法 ----》r‘\bm\w*\b’
语法
re.match(pattern,string,[flags])
从字符串的开始出进行匹配,成功返回Match对象,否则返回None
常用flags
标志 | 说明 |
---|---|
A或ASCAII | 对于\w、\W、\b、\B、\D、\s、\S只进行ASCAII匹配 |
I或IGNORECASE | 执行不区分大小写 |
M或MULTILINE | 将^和$用于包括整个字符串的开始和结束的每一行(默认情况下,适用于整个字符串的开始和结束处) |
S或DOTALL | 使用“.”字符匹配所有字符,包括换行符 |
X或VARBOSE | 忽略模式字符串中未转移的空格和注释 |
import re
if __name__ == '__main__':
pattern=r'mr_\w+'
string1='mr_123'
string2='123_mr_'
string3='MR_123'
match=re.match(pattern,string1)
print(match)
match = re.match(pattern, string2)
print(match)
match = re.match(pattern, string3)
print(match)
match = re.match(pattern, string3,re.I)
print(match)
》》》
<re.Match object; span=(0, 6), match='mr_123'>
None
None
<re.Match object; span=(0, 6), match='MR_123'>
import re
if __name__ == '__main__':
pattern = r'mr_\w+'
string1 = 'mr_123mr_123'
match = re.match(pattern, string1)
print(match)
print('匹配的开始位置:', match.start())
print('匹配的结束位置:', match.end())
print('匹配位置的元组:', match.span())
print('要匹配的字符串:', match.string)
print('匹配的数据:', match.group())
》》》
<re.Match object; span=(0, 12), match='mr_123mr_123'>
匹配的开始位置: 0
匹配的结束位置: 12
匹配位置的元组: (0, 12)
要匹配的字符串: mr_123mr_123
匹配的数据: mr_123mr_123
re.search(pattern,string,[flags])
从字符串的开始出进行匹配,成功返回Match对象,否则返回None
import re
if __name__ == '__main__':
pattern=r'mr_\w+'
string1='mr_123'
string2='123_mr_'
string3='MR_123'
match=re.search(pattern,string1)
print(match)
match = re.search(pattern, string2)
print(match)
match = re.search(pattern, string3)
print(match)
match = re.search(pattern, string3,re.I)
print(match)
》》》
<re.Match object; span=(0, 6), match='mr_123'>
None
None
<re.Match object; span=(0, 6), match='MR_123'>
re.findall(pattern,string,[flags])
从字符串的开始出进行匹配,成功返回Match对象,否则返回None
import re
if __name__ == '__main__':
pattern = r'mr_\w+'
string1 = 'mr_123 mr_123'
match = re.findall(pattern, string1)
print(match)
for item in match:
print(item)
》》》
['mr_123', 'mr_123']
mr_123
mr_123
re.sub(pattern,repl,string,count,[flags])
import re
if __name__ == '__main__':
pattern = r'mr_\w+'
string1 = 'mR_123 mr_123'
match = re.sub(pattern,'XXXXXX',string1)
print(match)
》》》
mR_123 XXXXXX
re.split(pattern,string,[maxsplit],[flags])
import re
if __name__ == '__main__':
pattern = r'[?|&]'
string1 = 'https://blog.csdn.net/huiguo_?spm=1010.2135.3001.5343'
match=re.split(pattern,string1)
print(match)
print('--------------------------------')
for item in match:
print(item)
》》》
['https://blog.csdn.net/huiguo_', 'spm=1010.2135.3001.5343']
--------------------------------
https://blog.csdn.net/huiguo_
spm=1010.2135.3001.5343