美文网首页互联网技术
Python的正则表达式匹配

Python的正则表达式匹配

作者: LiuShaodong | 来源:发表于2019-12-24 19:54 被阅读0次

正则表达式(regular expression),是定义了一个有规则的表达式,编程语言能够根据这条规则,帮助小伙伴们从字符串中寻找所有的符合规则的部分,根据正则表达式的定义规则,我们可以将规则写的很具体,比如 3,那么 Python 会帮我们去匹配给定的字符串是否包含 3,也可以复杂一点,例如,\d 表示数字,Python 会帮我们把字符串中的数字都匹配出来,那么,我们一起来学习一下 Python 中正则匹配的语法吧:

匹配一句话内是否包括某个字段

pattern1 = "cat"
pattern2 = "bird"
string = "dog runs to cat"
print(pattern1 in string)  # True
print(pattern2 in string)  # False

用正则包 re 来操作上面同样的需求

pattern1 = "cat"
pattern2 = "bird"
string = "dog runs to cat"
print(re.search(pattern1,string))
print(re.search(pattern2,string))

[ ] 和 - 的相关用法

pattern = r"r[au]n"  # 可以匹配到 run 和 ran (其中,r"",r 在字符串前,代表是正则表达式,不是普通的字符串)
print(re.search(pattern,string))
print(re.search(r"r[A-Z]n","dog runs to cat"))
print(re.search(r"r[a-z]n","dog runs to cat"))
print(re.search(r"r[0-9]n,dog r0ns to cat"))
print(re.search(r"r[0-9a-z]n","dog runs to cat"))

\d 匹配所有的数字,\D 匹配所有的非数字

\s 匹配所有的空白,包括空格,制表符,回车等造成的空白

\S 匹配所有的非空白字符

\w 匹配 a-zA-Z0-9,即所有的数字,字母和 "_"

\W 匹配所有非数字,字母和 "_"

\b 匹配单个空格

print(re.search(r"\bruns\b","dog runs to cat") # 可以匹配到
print(re.search(r"\bruns\b","dog  runs  to cat") # 匹配不到
print(re.search(r"\b runs \b","dog  runs  to cat") # 匹配不到

\B 忽略空格匹配

print(re.search(r"\Bruns\B","dog runs to cat") # 匹配到
print(re.search(r"\Bruns\B","dog  runs  to cat") # 匹配到
print(re.search(r"\B runs \B","dog  runs  to cat") # 匹配到

匹配 \,前面需要再加一个 \

print(re.search(r"runs\\","runs\ to me")) # 匹配到
print(re.search(r"r.n","r-ns to me")) # 匹配到,"."可以匹配一个字符

匹配句首句尾

print(re.search(r"^dog","dog runs to cat")) # 匹配到    
print(re.search(r"cat$","dog runs to cat"))   # 匹配到

? 匹配(内容)可以省略括号中内容

print(re.search(r"Mon(day)?","Monday"))  # 匹配到
print(re.search(r"Mon(day)?","Mon"))    # 匹配到

Multi 多行匹配

string_mul = """
dog runs to cat.
I run to dog.
"""

print(re.search(r"^I",string))  # 匹配不到,把整个字符串看成一个句子,句首是 dog
print(re.search(r"^I",string,flags=re.M)) # 匹配到,整个字符串看成是多个句子,每个句子的句首都匹配一下

0次或者多次出现 用 *,1次或者多次出现 用 +

print(re.search(r"ab*","a"))   # 匹配到,b可以出现0次或者多次
print(re.search(r"ab*","abbbbbbbb")) # 匹配到,b可以出现0次或者多次
print(re.search(r"ab+","a"))  # 匹配不到,b可以出现1次或者多次
print(re.search(r"ab+","abbbbbbbb")) # 匹配到,b可以出现1次或者多次

{ } 出现次数的范围,b{1,10}指的是b可以出现1次到10次之间

print(re.search(r"ab{2,10}","ab"))  #匹配不到
print(re.search(r"ab{2,10}","abbbbb")) #匹配到

group 组匹配

match = re.search(r"ID: (\d+), Date: (.+)","ID: 021523, Date: Feb/12/2017")
print(match.group())      # 输出匹配到的所有的信息
print(match.group(1))    # 输出第一个() 匹配到的信息
print(match.group(2))    # 输出第二个() 匹配到的信息
如果 () 特别多,会导致 1,2,……这样很麻烦,应该起一个名字:?P<名字>
match = re.search(r"ID: (?P<id>\d+), Date: (?P<data>.+)","ID: 021523, Date: Feb/12/2017")
print(match.group("id"))
print(match.group("date"))

findall 寻找所有的匹配,区别于 search 是找到一个就可以

print(re.findall(r"r[ua]n","run ran ren")) # run ran

替换

print(re.sub(r"r[au]ns","catches","dog runs to cat"))  # dog catches to cat

分裂

print(re.split(r"[,;\.]","a;b,c.d;e"))  # a b c d e  如果碰到任何一个 r"[分隔符]" 就把后面的内容分割。"." 代表任何字符,所以我们需要加 "\.",将其转义为一个点

complie 编译形式

compiled_re = [re.compile(r"r](http://re.compile%28r/)[ua]n")
print(compiled_re.search("dog run to cat")) #跟上述的操作基本一致,不同就是,先把规则进行 compile,然后用 compile 的规则作用于文本

相关文章

  • Django URL传参

    1. 正则表达式匹配传参: 链接网页形如:/list/python/时,通过正则表达式匹配到字符串"python"...

  • 判断一个字符串是否是合法ip

    此题目可以使用正则表达式匹配或者字符串匹配方法进行判断 思路: python2.7正则表达式解法: python2...

  • python正则表达式1

    python正则表达式1 re 模块 re 模块使 Python 语言拥有全部的正则表达式功能。可用于匹配文字,校...

  • python的正则表达式

    python提供了实现正则表达式的re模块。 正则表达式的匹配字符: python的re模块常用函数 1.comp...

  • Day-15 正则表达式

    正则表达式:用来查找、匹配、切割字符串的工具 python对正则表达式的支持

  • day19-总结

    python中的正则表达式 正则表达式:用来做字符串查找,匹配,切割用的一种工具python对正则表达式的支持:提...

  • 说说 Python 的贪心和非贪心匹配策略

    Python 的正则表达式默认是“ 贪心” 匹配策略, 这表示在有二义的情况下,Python 会尽可能地匹配最长的...

  • 《python编程自动上手》笔记2 模式匹配与正则表达式

    20190105 qzd python中所有正则表达式都在re模块中。--> import re 正则表达式匹配步...

  • Python学习路线:定义实现最短匹配的正则表达式

    Python学习路线:定义实现最短匹配的正则表达式 1、需求 我们正在尝试用正则表达式对文本模式做匹配,但识别出来...

  • Regex

    开源中国正则表达式测试工具 常用的匹配规则 python的re库提供了整个正则表达式的实现 修饰符 在网页匹配中,...

网友评论

    本文标题:Python的正则表达式匹配

    本文链接:https://www.haomeiwen.com/subject/soutoctx.html