【python之re模块学习第3天】正则表达式的应用:转义及原生字符串

449次阅读
没有评论
【python之re模块学习第3天】正则表达式的应用:转义及原生字符串

目录

  • 1 python的转义
  • 2 正则表达式的转义
    • 2.1 python本身不转义的符号
    • 2.2 python本身转义的符号
  • 3 原生字符串
  • 4 总结
  • 参考文献

1 python的转义

  • 含义:转义字符是一个计算机专业词汇,在python里用反斜杠表示转义字符。
  • 功能:在计算机当中,我们可以写出123 ,也可以写出字母abcd,但有些字符我们无法手动书写,比如我们需要对字符进行换行处理,但不能写出来换行符,当然我们也看不见换行符。像这种情况,我们需要在字符中使用特殊字符时,就需要用到转义字符。
  • 例子:在下述代码中,用n表示换行符;用'表示将单引号作为字符输出,此时单引号不具备闭合字符串功能;用"将双引号作为字符输出,此时双引号不具备闭合字符串功能;在\中,第一个反斜杠表示的是转义,第二个表示的是被转义的对象是一个反斜杠,将第二个反斜杠作为字符输出,该反斜杠不具备转义功能。
  • #例子1 print('hellonworld') #输出如下,两个单词间将存在换行符 #hello #world

    #例子2 print('',"') #输出结果为 ',"

    #例子3 print('\') #输出结果为

  • 常见的转义功能:
  • 转义字符描述
    在行尾 续行符
    |反斜杠符号
    单引号
    " 双引号
    a 响铃
    b 退格(Backspace)
    00
    n 换行
    v 纵向制表符
    t 横向制表符
    r 回车
    f 换页
    yy 八进制数,yy代表的是字符,例如12代表的是换行,其中0是数字0
    xyy 十六进制数,yy代表的是字符,例如x0a代表的是换行
    other 其他字符以普通格式输出

    2 正则表达式的转义

  • 如果使用正则表达式匹配特殊字符,需要加上反斜杠来表示转义。
  • 需要转义的特殊字符包括各个元字符:*、+、?、^、$、[、]、(、)、{、}、|、,另外需要注意的还有d、D、w、W、s、S、A、Z、b、B。
  • 过程:正则过程中,匹配模式的字符串需要先经过python解析(能转义的会先转义),其解析结果才是匹配模式的内容。
    python字符串 ====》  正则匹配模式  ====》  匹配目标字符串
    ‘d+\d+’    ====》    ‘d+**d+’   ====》   ‘2**16’
    ‘d+**d+’   ====》   ‘d+**d+’   ====》   ‘2**16’
    ‘\\’       ====》    ‘\’     ====》   ‘gggggg’
  • 2.1 python本身不转义的符号

  • 包括:*、+、?、^、$、[、]、(、)、{、}、|、d、D、w、W、s、S、A、Z、B
  • 由于python对字符串'd'不会有转义效果出现,而对'\d'会先将反斜杠进行转义,转义后其内容与前者一致,所以匹配结果一致。
  • 例子:
  • import re print(re.findall('d+**d+','2**16')) #输出 ['2**16'] print(re.findall('\d+\*\*\d+','2**16')) #输出 ['2**16'],与上进行对比。 print(re.findall('-?d+.?d*','12 -36 -28.2 1.34')) #输出 ['12 ', '-36 ', '-28.2', '1.34']

    2.2 python本身转义的符号

  • 包括:、b
  • 缺点:理解不直观。
  • 在正则表达式中,匹配模式是采用字符串来描述的,如果是要匹配字符串中的反斜杠,匹配模式的写法就会很混乱,需要写4个反斜杠。
  • 首先是python对这个字符串的解析,第1和第3个反斜杠作为转义字符,第2和第4个作为被转义字符,也就是python将该字符串解析为两个反斜杠,也就是匹配模式其实内容是两个反斜杠。
  • 然后在正则函数使用时,匹配模式的第一个反斜杠作为转义字符,表示要找到被转义的内容,也就是一个反斜杠。
  • import re print(re.findall('\\','qqqgqqq')) #输出['\'],输出结果的第一个符号表示的是转义,其实是匹配到一个反斜杠 print(re.findall('\\','qqq\gqqq')) #输出['\'],\被python解析为一个反斜杠,所以没有匹配到。 print(re.findall('\\','qqqagqqq')) #输出[],a被python解析为响铃符号,不是反斜杠,所以没有匹配到。

    print(re.findall('bisb',"This is a test.")) #输出[],因为b先被转义成退格符,相当于该语句是匹配目标字符串中的退格符。 print(re.findall('\bis\b',"This is a test.")) #输出['is']

    3 原生字符串

  • Python中字符串前面加上 r 表示原生字符串,python对于原生字符串不会进行转义,也就是所见及所得。
  • 与上述例子对比理解原生字符串的输出。
  • print(r'hellonworld') #输出 hellonworld print(r'',"') #输出 '," print(r'\') #输出 \

  • 正则表达式中原生字符串的应用的优点:避免了多重转义带来的书写和理解上的麻烦。
  • import re print(re.findall(r'\',r'qqqgqqq')) #输出['\'] print(re.findall(r'\',r'qqq\gqqq')) #输出['\', '\'] print(re.findall(r'\',r'qqqagqqq')) #输出['\'],因为a不再进行转义

    print(re.findall(r'bisb',r"This is a test.")) #输出['is'] print(re.findall(r'\bis\b',r"This is a test.")) #输出[],相当于是匹配bisb。

    4 总结

  • 掌握python对字符串的转义规则;
  • 掌握正则表达式的转义规则;
  • 理解当python和正则双重转义的顺序及其影响;
  • 理解原生字符串的优点并掌握其使用方法。
  • 参考文献

  • 《RE正则表达式模块(Python视频教程)》
  • 《RE正则表达式模块(Python视频教程)》
  • 神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

    相关文章:

    版权声明:Python基础教程2022-11-22发表,共计2883字。
    新手QQ群:570568346,欢迎进群讨论 Python51学习