Python中的正则

mac2022-06-30  25

regex_lst = [

  ('字符组',),

  ('非打印字符',),

  ('特殊字符',),

  ('定位符',),

  ('限定符',),

  ('re模块',),

  ('分组命名',),

  ('或匹配',),

  ('贪婪匹配与惰性匹配',),

]

 

字符组

  [0-9]

  [a-z]

  [A-Z]

  [^a]

非打印字符

  \w     匹配字母,数字,下划线  word

  \s      匹配空字符          space

  \d   匹配数字           digit

特殊字符

  .        匹配除换行符 \n 之外的任何单字符

定位符

  ^  匹配字符串的开始位置

  $    匹配字符串的结尾位置

限定符

  *      0次或多次

  +     1次或多次

  ?     0次或1次

  {n}   n次

  {n,}  n次或多次

  {n,m}    n次至m次

 

re模块

  re_lst = [

    ('re.compile(regex)',),

    ('re.findall(pattern, str)',),

    ('re.finditer(pattern, str)',),

    ('re.search(pattern, str)',),

  ]

re.compile(regex)

1 import re 2 3 """ 4 re.compile(regex) 5 编译一个正则表达式模式,返回一个模式对象 6 """ 7 regex = r'[a-z]' 8 pattern = re.compile(regex)

re.findall(pattern, str)

1 import re 2 3 """ 4 re.findall(pattern, str) 5 返回所有满足匹配条件的结果,并放到列表中 6 """ 7 regex = r'[a-zA-Z]+' 8 s = 'Hello Python' 9 pattern = re.compile(regex) 10 11 lst = re.findall(pattern, s) 12 print(lst) # ['Hello', 'Python']

re.finditer(pattern, str)

1 import re 2 3 """ 4 re.finditer(pattern, str) 5 返回迭代器 6 迭代器中每一个元素需要调用group(),得到结果 7 """ 8 regex = r'[a-zA-Z]+' 9 s = 'Hello Python' 10 pattern = re.compile(regex) 11 12 iterator = re.finditer(pattern, s) 13 14 print(iterator) # <callable_iterator object at 0x000001FDB3F29BE0> 15 16 for i in iterator: 17 print(i.group())

re.search(pattern, str)

1 import re 2 3 """ 4 re.search(pattern, str) 5 返回满足匹配条件的第一个结果对象 6 """ 7 regex = r'[a-zA-Z]+' 8 s = 'Hello Python' 9 pattern = re.compile(regex) 10 11 obj = re.search(pattern, s) 12 13 if obj: 14 print(obj.group())

分组命名

1 import re 2 3 """ 4 flags 5 re.I 忽略大小写 6 re.M 多行模式,改变^和$的行为 7 re.S .可以匹配任意字符,包括换行符 8 """ 9 regex = r'<dd>.*?title="(?P<title>.*?)".*?</dd>' 10 s = '<dd><a href="#" title="Python中的正则">...</a></dd>' 11 pattern = re.compile(regex, re.S) 12 13 iterator = re.finditer(pattern, s) 14 15 for i in iterator: 16 print(i.group('title'))

或匹配

1 import re 2 3 """ 4 取消分组 5 (?:) 6 或匹配 7 long|short 8 """ 9 regex = r'www.(?:page|hopen).com' 10 s = 'www.hopen.com' 11 pattern = re.compile(regex) 12 13 iterator = re.finditer(pattern, s) 14 15 for i in iterator: 16 print(i.group())

贪婪匹配与惰性匹配

1 import re 2 3 4 def get_data(regex, s): 5 pattern = re.compile(regex) 6 obj = re.search(pattern, s) 7 if obj: 8 return obj.group() 9 10 11 # 贪婪匹配 12 regex_greedy = r'<.*>' 13 # 惰性匹配 14 regex_lazy = r'<.*?>' 15 content = '<a href="#">...</a>' 16 17 ret_1 = get_data(regex_greedy, content) 18 ret_2 = get_data(regex_lazy, content) 19 print(ret_1) # <a href="">...</a> 20 print(ret_2) # <a href="">

 

  

转载于:https://www.cnblogs.com/HopenZhang/p/9990309.html

相关资源:Python实现正则表达式匹配任意的邮箱方法
最新回复(0)