正则表达式匹配的理解

正则表达式的三步走:

Python字符串的转义   --》   正则表达式转义  --》 内容与转义后原始字符串内容进行匹配

import re

re.search('\\t','\t').group()  #>>'\t'

1.'\\t' python字符串转义为正则表达式  \t    

2.正则表达式解释 \t 为一个制表符

3.python字符串内容'\t' 转义为原始字符串  即一个制表符

4.正则表达式 与 原始(正常)字符串匹配    

明确两个概念 python字符串原始的字符串

原始字符串  我就想表达一个反斜杠后面加英文 即 \abc

python字符串  想表示\原始的意义需要加一个转义字符 即变成'\\abc'

正则表达式 与 原始字符串 进行匹配

例:

import re

pureStr = re.search('\\\\abc','\\abc').group()  #>>'\\abc'  

print(pureStr)  #>>\abc

        1.pyhon字符串'\\\\abc' --》 正则表达式\\abc  匹配字符串  \abc

        2.python字符串'\\abc' --》 原始字符串 \abc

        3.匹配字符串  与 原始字符串 一致因而能够匹配上

特殊符号的匹配

例:

1.

import re

re.search('\\~','\~').group()  #>>'~'  

print(re.search('\\~','\~').group())  #>>~

re.search('\\~','\~').span()  #>>(1,2)

2.

import re

re.search('\\\\~','\~').group()  #>>'\\~'  

print(re.search('\\\\~','\~').group())  #>>\~

3.

import re

re.search('\\\\\\~','\\~').group()  #>>'\\~'  

print(re.search('\\\\\\~','\\~').group())  #>>\~

4.

import re

re.search('\\\\~','\\~').group()  #>>'\\~'  

print(re.search('\\\\~','\\~').group())  #>>\~

5.

import re

re.search('\\\\\\\\~','\\\\~').group()  #>>'\\\\~'  

print(re.search('\\\\\\\\~','\\\\~').group())  #>>\\~

为什么会有这种情况?

1号工作流程

   1.python字符串'\\~'  --》 正则表达式\~  匹配字符串~   

从这里我们可以看出正则表达式将  \特殊字符  都直接解释为该特殊字符 

正则表达式 \#  匹配字符串  #    正则表达式 \=  匹配字符串 =

  2.python字符串'\~' --》 原始字符串 \~ 

理解为什么原始字符串是\~ 而不是 ~

因为从span()方法可以看出是从母串的第二个字符匹配上的,如果python字符串'\~' 转换为原始字符串为~,那返回值应该是(0,1),从而也知道python字符串并不会转义~,但正则表达式会

  3.匹配字符串  与 原始字符串  去进行匹配

2号

理解为什么group()返回的python字符串是'\\~'

因为若原始字符串是 \~  所对应的python字符串就应该为 '\\~'

写为'\~'  不会报错因为python字符串并不会转义~,它知道你想表达的原始字符串为\~,为使得正确表达在底层实际上帮你补了一个'\',因而'\~' 实际上其实是'\\~'

这样整个工作流程也就好理解了

1.python字符串'\\\\~' --》 正则表达式 \\~  匹配字符串 \~

2.python字符串'\~' --》  原始字符串\~

3.进行匹配

3号工作流程

1.python字符串'\\\\\\~' --》 正则表达式 \\\~ 匹配字符串 \~  (注:\\匹配\  \~匹配~)

2.python字符串'\\~' --》  原始字符串\~

3.进行匹配

4号工作流程

1.python字符串'\\\\~' --》 正则表达式 \\~  匹配字符串 \~

2.python字符串'\\~' --》  原始字符串\~

3.进行匹配

5号工作流程

1.python字符串'\\\\\\\\~' --》 正则表达式 \\\\~  匹配字符串 \\~

2.python字符串'\\\\~' --》  原始字符串\\~

3.进行匹配

转义字符的匹配

例:

1.

import re

re.search('\n','\n').group()    #>>'\n'

print(re.search('\n','\n').group())

2.

import re

re.search('\\n','\n').group()  #>>'\n'

print(re.search('\\n','\n').group())

3.

import re

re.search('\\n','\\n').group()   #报错

print(re.search('\\n','\\n').group())

为什么1和2结果一样,3却报错

模拟1.流程:

1.python字符串'\n' --》正则表达式 一个换行符  匹配一个换行符  

怎么理解:假设python字符串为'a'  --》正则表达式  a  (即一个固定a字符,这里a和换行符一个概念,都是固定字符)  因此正则表达式 a 匹配字符串 a      同理正则表达式 换行符  匹配字符串换行符

2.python字符串'\n' --》 原始字符串 一个换行符

3.进行匹配

模拟2.流程:

1.python字符串'\\n' --》正则表达式 \n  匹配字符串 一个换行符

2.python字符串'\n' --》 原始字符串 一个换行符

3.进行匹配

模拟3.流程:

1.python字符串'\\n' --》正则表达式 \n  匹配字符串 一个换行符

2.python字符串'\\n' --》 原始字符串 \n

3.换行符 与 \n 不匹配  换行符等价于字符a是一个字符,而原始字符串\n 是两个字符

总结:

说了这么多,总算把这几个概念理清楚了。

在实际运用中,还是直接 r'' 来就好了,这样就没有python字符串转义这一中间过程了

例:想匹配字符串 \sub

import re

re.search(r'\\sub',r'\this is a sample \subsription').group()  #>>'\\sub'

print(re.search(r'\\sub',r'\this is a sample \subsription').group()) #>>\sub

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值