常见元字符及其含义
符号 含义
. 匹配除换行符之外的任意字符
^ 匹配字符的开始位置
$ 匹配字符的结束位置
* 匹配0次,1次或多次前面的原子
? 匹配0次或1次前面的原子
+ 匹配1次或多次前面的原子
{n} 前面的原子恰好出现n次
{n,} 前面的原子至少出现n次
{n,m} 前面的原子至少出现n次,至多出现m次
| 模式选择符
() 模式单元符
1.任意匹配元字符
“.”可以匹配除换行符之外的任意字符
import re
pattern=".python."
string="ashfkohgfoi3_pythonsfkpq"
result1=re.search(pattern,string)
print(result1)
运行结果为:
<_sre.SRE_Match object; span=(12, 20), match='_pythons'>
匹配的结果是ashfkohgfoi3**_pythons**fkpq,也就是”python”的前一位和后一位
2.边界限制元字符
我用“^”开始匹配,用“$”结束匹配:
import re
pattern1="^pythom"
pattern2="python$"
pattern3="^ash"
pattern4="pq$"
string="ashfkohgfoi3_pythonsfkpq"
result1=re.search(pattern1,string)
result2=re.search(pattern2,string)
result3=re.search(pattern3,string)
result4=re.search(pattern4,string)
print(result1)
print(result2)
print(result3)
print(result4)
结果如下:
None
None
<_sre.SRE_Match object; span=(0, 3), match='ash'>
<_sre.SRE_Match object; span=(22, 24), match='pq'>
我们可以看到字符串ash**fkohgfoi3_pythonsfk**pq以“ash” 开头,以 “pq” 结尾,所以pattern1,pattern2匹配失败。
3.限定符
常见的限定符有 * ,?, +, {n}, {n,} ,{n,m} 。
代码如下:
import re
pattern1="py.*n"
pattern2="hf{2}"
pattern3="hf{3}"
pattern4="hf{2,}"
string="ashfffkohgfoi3_pythonsfkpq"
result1=re.search(pattern1,string)
result2=re.search(pattern2,string)
result3=re.search(pattern3,string)
result4=re.search(pattern4,string)
print(result1)
print(result2)
print(result3)
print(result4)
运行结果如下:
<_sre.SRE_Match object; span=(15, 21), match='python'>
<_sre.SRE_Match object; span=(2, 5), match='hff'>
<_sre.SRE_Match object; span=(2, 6), match='hfff'>
<_sre.SRE_Match object; span=(2, 6), match='hfff'>
py.*n 是指 匹配 py 和 n 之间除换行符之外所有字符
hf{2}要求匹配出现两次f
fh{2,}要求f至少出现两次,所以,会尽可能的匹配,所以结果为hfff
4.模式选择符
代码如下:
import re
pattern1="django|python"
string="ajsdl_python2141hfiqwdjangoadoagsda"
result1=re.search(pattern1,string)
print(result1)
运行结果如下:
<_sre.SRE_Match object; span=(6, 12), match='python'>
可以看到ajsdl_**python**2141hfiqw**django**adoagsda中两个都可以被匹配,但是由于模式选择符选择任意一个匹配,所以先匹配到了”python”
5.模式单元符
可以用()将一些原子组合成一个大原子使用
代码如下:
import re
pattern1="(xyz){1,}"
pattern2="xyz{1,}"
string="xyzxyzxyzxyzxyzhdjsahuwhdus"
result1=re.search(pattern1,string)
result2=re.search(pattern2,string)
print(result1)
print(result2)
运行结果如下:
<_sre.SRE_Match object; span=(0, 15), match='xyzxyzxyzxyzxyz'>
<_sre.SRE_Match object; span=(0, 3), match='xyz'>
(xyz){1,}中,xyz作为一个整体,将尽可能的把xyz这个整体多匹配
而xyz{1,}则是z原子至少出现一次