元字符

常见元字符及其含义

符号                      含义
 .                  匹配除换行符之外的任意字符
 ^                  匹配字符的开始位置
 $                 匹配字符的结束位置
 *                  匹配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 是指 匹配 pyn 之间除换行符之外所有字符

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原子至少出现一次

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值