day23_1-re模块之转义字符、分组、方法

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# ------------------------------------------------------------
# 参考资料:
# python模块(转自Yuan先生) - 狂奔__蜗牛 - 博客园
# https://www.cnblogs.com/guojintao/articles/9070485.html
# Python 正则表达式 | 菜鸟教程
# http://www.runoob.com/python/python-reg-expressions.html
# ------------------------------------------------------------
# ********************day23_1-re模块之转义字符、分组、方法 *******************
# ********************day23_1-re模块之转义字符、分组、方法 *******************
# =====>>>>>>内容概览
# =====>>>>>>内容概览


# ------------------------------------------------------------
# # 1、 与 r字符串
# # #  匹配一个特殊字符边界,比如空格 ,&,#等
# # # r字符串:r'': 一般用在正则表达式中,称为原始字符串,作用是将Python语法中的反斜杠转义给
# # # 取消,将其设置成为一个普通的字符串。
# # # 如 re.findall(r' ','I AM LIST '), r' '中的“ ”就只是一个正常的符号,python
# # # 编译器中不再具有“换行”功能,进入re模块处理的时候,按照re对于“ ”的含义来处理
# # #
# # # 二十三、正则表达式中的“r”含义 - CSDN博客
# # # https://blog.csdn.net/chushujin/article/details/81380694
# # # 正则表达式r和re - CSDN博客
# # # https://blog.csdn.net/y15518325965/article/details/79405779
# ------------------------------------------------------------

# ------------------------------------------------------------
# # 2、r字符串补充
# # # r字符串:r'': 一般用在正则表达式中,称为原始字符串,作用是将Python语法中的反斜杠转义给
# # # 取消,将其设置成为一个普通的字符串。
# # # 如 re.findall(r' ','I AM LIST '), r' '中的“ ”就只是一个正常的符号,python
# # # 编译器中不再具有“换行”功能,进入re模块处理的时候,按照re对于“ ”的含义来处理
# # #
# # # 二十三、正则表达式中的“r”含义 - CSDN博客
# # # https://blog.csdn.net/chushujin/article/details/81380694
# # # 正则表达式r和re - CSDN博客
# # # https://blog.csdn.net/y15518325965/article/details/79405779
# ------------------------------------------------------------

# ------------------------------------------------------------
# # 3、元字符或 a|b
# # # 匹配a或b
# ------------------------------------------------------------

# ------------------------------------------------------------
# # 4、元字符之分组()
# # # 匹配括号内的表达式,也表示一个组
# # #
# ------------------------------------------------------------

# ------------------------------------------------------------
# # 5、re.search
# # # 扫描整个字符串并返回第一个成功的匹配。
# # # 匹配成功re.search方法返回一个匹配的对象,否则返回None。
# # # 我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

# ------------------------------------------------------------

# ------------------------------------------------------------
# # 6、re.search.group 与 groups ???
# # # group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,
# # # 在这种情况下它将返回一个包含那些组所对应值的元组。
# # #
# # # groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
# ------------------------------------------------------------

# ------------------------------------------------------------
# # 7、re.group("标签"),在re.search("(?P<标签>匹配内容与规则)",被匹配字符串)的应用
# # #
# ------------------------------------------------------------

# ------------------------------------------------------------
# # 8、re.group("标签"),在re.search("(?P<标签>匹配内容与规则)",被匹配字符串)的应用
# # #
# ------------------------------------------------------------

# ------------------------------------------------------------
# # 9、re方法的使用
# # # findall、search使用的比较多
# # # march等用的比较少
# ------------------------------------------------------------

# ------------------------------------------------------------
# # 10、re.match
# # # re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,
# # # match()就返回none。 相当于search方法加元字符^
# # #
# # # re.match(pattern, string, flags=0)
# # # pattern 匹配的正则表达式
# # # string 要匹配的字符串。
# # # flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志
# ------------------------------------------------------------

# ------------------------------------------------------------
# # 11、re.match.group
# # # 作用于re.search.group相同,见上面
# ------------------------------------------------------------

# ------------------------------------------------------------
# # 12、re.split
# # # split 方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下:
# # #
# # # re.split(pattern, string[, maxsplit=0, flags=0])
# # # pattern 匹配的正则表达式
# # # string 要匹配的字符串。
# # # maxsplit 分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。
# # # flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
# # # 参见:正则表达式修饰符 - 可选标志
# ------------------------------------------------------------

# ------------------------------------------------------------
# # 13、re.sub
# # # Python 的 re 模块提供了re.sub用于替换字符串中的匹配项。
# # #
# # # re.sub(pattern, repl, string, count=0, flags=0)
# # # pattern : 正则中的模式字符串。
# # # repl : 替换的字符串,也可为一个函数。
# # # string : 要被查找替换的原始字符串。
# # # count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
# ------------------------------------------------------------

# ------------------------------------------------------------
# # 14、re.subn
# # # Python 的 re 模块提供了re.subn用于替换字符串中的匹配项。并且返回替换的次数
# ------------------------------------------------------------

# ------------------------------------------------------------
# # 15、re.compile
# # # compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,
# # # 供 match() 和 search() 这两个函数使用。
# # # ===>>>只有少数使用的时候,使用该方式与不用,差别不大;但是在数量非常多的时候,能够非常
# # # ===>>>显著的提高程序的运行效率,原因在于,compile提前进行的编译处理,以后用到的该方法都可以不用重新
# # # ===>>>编译就可以使用
# # #
# # # re.compile(pattern[, flags])
# # # pattern : 一个字符串形式的正则表达式
# # # flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
# # # re.I 忽略大小写
# # # re.L 表示特殊字符集 w, W, , B, s, S 依赖于当前环境
# # # re.M 多行模式
# # # re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
# # # re.U 表示特殊字符集 w, W, , B, d, D, s, S 依赖于 Unicode 字符属性数据库
# # # re.X 为了增加可读性,忽略空格和 # 后面的注释
# ------------------------------------------------------------

# ------------------------------------------------------------
# # 15、re.finditer
# # # 和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
# # #
# # # re.finditer(pattern, string, flags=0)
# # # pattern 匹配的正则表达式
# # # string 要匹配的字符串。
# # # flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表
# # # 达式修饰符 - 可选标志
# ------------------------------------------------------------

# ------------------------------------------------------------
# # 16、findall、search在计算表达式中的应用
# # # 使用search 能逐次的将计算表达式中的内容取出来,清晰明了
# # # 使用findall一次性将计算表达式中的内容取出来
# # # 相比之下,在计算表达式上,search更合适一些
# ------------------------------------------------------------



# ------------------------------------------------分割线-------------------------------------------------
# ------------------------------------------------分割线-------------------------------------------------
# ------------------------------------------------分割线-------------------------------------------------

# 01 02 转义字符、分组
# 01 02 转义字符、分组
'''
# ------------------------------------------------------------
# # 1、  与 r字符串
# # #  匹配一个特殊字符边界,比如空格 ,&,#等
# # #  r字符串:r'': 一般用在正则表达式中,称为原始字符串,作用是将Python语法中的反斜杠转义给
# # #  取消,将其设置成为一个普通的字符串。
# # #  如  re.findall(r'
','I
 AM
 LIST
'),  r'
'中的“
”就只是一个正常的符号,python
# # #  编译器中不再具有“换行”功能,进入re模块处理的时候,按照re对于“
”的含义来处理
# # #
# # #  二十三、正则表达式中的“r”含义 - CSDN博客
# # #  https://blog.csdn.net/chushujin/article/details/81380694
# # #  正则表达式r和re - CSDN博客
# # #  https://blog.csdn.net/y15518325965/article/details/79405779
# ------------------------------------------------------------
'''
#
# import re
#
# # r字符串
# b1 = re.findall('\n','I
 AM
 LIST
')
# b2 = re.findall(r'
','I
 AM
 LIST
')
# print("b1",b1)
# print("b2",b2)
#
# # 
# a1 = re.findall('I','I AM LIST')
# a2 = re.findall('^I','I AM LIST')
# a3 = re.findall('I\b','I AM LIST')
# # 使在字符串在编译器中扌安照原来的含义,在re中实现功能
# a4 = re.findall(r'I','I AM LIST')
#
# print(a1)
# print(a2)
# print(a3)
# print(a4)
#
# # D:Anaconda3python.exe D:/C_cache/py/day23-re_logging_hashlib_MoKuaiDaoRu/day23_1_re_.py
# # b1 ['
', '
', '
']
# # b2 ['
', '
', '
']
# # ['I', 'I']
# # ['I']
# # ['I']
# # ['I']
# #
# # Process finished with exit code 0






'''
# ------------------------------------------------------------
# # 2、r字符串补充
# # #  r字符串:r'': 一般用在正则表达式中,称为原始字符串,作用是将Python语法中的反斜杠转义给
# # #  取消,将其设置成为一个普通的字符串。
# # #  如  re.findall(r'
','I
 AM
 LIST
'),  r'
'中的“
”就只是一个正常的符号,python
# # #  编译器中不再具有“换行”功能,进入re模块处理的时候,按照re对于“
”的含义来处理
# # #
# # #  二十三、正则表达式中的“r”含义 - CSDN博客
# # #  https://blog.csdn.net/chushujin/article/details/81380694
# # #  正则表达式r和re - CSDN博客
# # #  https://blog.csdn.net/y15518325965/article/details/79405779
# ------------------------------------------------------------
'''
#
# import re
#
# # 这个有四个,是因为,在编译器:\代表一个原生字符,\\代表两个原生字符\,
# # 进入re后,一个是有特殊意义的,因此两个\代表在re中的原生字符,
# # 当处理结束,返回python编译器,应该是一个字符,后面编译器将它翻译为\,以此表示是原生字符
# l2 = re.findall('\\','I AM LIST?')
# l22 = re.findall(r'\','I AM LIST?')
#
# print("l2",l2)
# print("l22",l22)
#
# # D:Anaconda3python.exe D:/C_cache/py/day23-re_logging_hashlib_MoKuaiDaoRu/day23_1_re_.py
# # l2 ['\', '\', '\']
# # l22 ['\', '\', '\']
# #
# # Process finished with exit code 0








'''
# ------------------------------------------------------------
# # 3、元字符或 a|b 
# # #  匹配a或b
# ------------------------------------------------------------
'''

# import re
# # 先匹配ka,后b
# a1 = re.findall('ka|b','kakbkab')
# print(a1)
#
# # D:Anaconda3python.exe D:/C_cache/py/day23-re_logging_hashlib_MoKuaiDaoRu/day23_1_re_.py
# # ['ka', 'b', 'ka', 'b']
# #
# # Process finished with exit code 0







'''
# ------------------------------------------------------------
# # 4、元字符之分组()
# # #  匹配括号内的表达式,也表示一个组
# # #  
# ------------------------------------------------------------
'''
#
# import re
# a1 = re.findall('(abc)','abcabcabc')
# a2 = re.findall('(abc)*','abcabcabc')           # ???
# a3 = re.findall('(abc)+','abcabcabc')           # ???
# a4 = re.findall('(abc)?','abcabcabc')           # ???
#
# b1 = re.findall('(abc)','abccc')
# b2 = re.findall('(abc)*','abccc')
# b3 = re.findall('(abc)+','abccc')
# b4 = re.findall('(abc)?','abccc')
#
# print(a1)
# print(a2)
# print(a3)
# print(a4)
#
# print("b1",b1)
# print("b2",b2)
# print("b3",b3)
# print("b4",b4)
#
#
# # D:Anaconda3python.exe D:/C_cache/py/day23-re_logging_hashlib_MoKuaiDaoRu/day23_1_re_.py
# # ['abc', 'abc', 'abc']
# # ['abc', '']
# # ['abc']
# # ['abc', 'abc', 'abc', '']
# # b1 ['abc']
# # b2 ['abc', '', '', '']
# # b3 ['abc']
# # b4 ['abc', '', '', '']
# #
# # Process finished with exit code 0






'''
# ------------------------------------------------------------
# # 5、re.search 
# # # 扫描整个字符串并返回第一个成功的匹配。
# # # 匹配成功re.search方法返回一个匹配的对象,否则返回None。
# # # 我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

# ------------------------------------------------------------
'''
#
import re
#
# a0 = re.search("d","asfd22af33asf555")
# a1 = re.search("d+","asfd22af33asf555")
# a2 = re.search("d+","asfdqwresfad")
# a3 = re.search("d[5]","asfd22af33asf555")
# print(a0)
# print(a1)
# print(a2)
# print(a3)
#
# # D:Anaconda3python.exe D:/C_cache/py/day23-re_logging_hashlib_MoKuaiDaoRu/day23_1_re_.py
# # <_sre.SRE_Match object; span=(4, 5), match='2'>
# # <_sre.SRE_Match object; span=(4, 6), match='22'>
# # None
# # <_sre.SRE_Match object; span=(13, 15), match='55'>
# #
# # Process finished with exit code 0







'''
# ------------------------------------------------------------
# # 6、re.search.group 与 groups          ???
# # # group(num=0)	匹配的整个表达式的字符串,group() 可以一次输入多个组号,
# # # 在这种情况下它将返回一个包含那些组所对应值的元组。
# # # 
# # # groups()	返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
# ------------------------------------------------------------
'''
#
# import re
#
# a0 = re.search("d", "asfd22af33asf555")
# a1 = re.search("d+", "asfd22af33asf555")
# a2 = re.search("d+", "asfdqwresfad")
# a3 = re.search("d[5]", "asfd22af33asf555")
# print(a0.group(),type(a0.group()))
# print(a1.group())
# # # print(a2.group())     # 报错,因为匹配不到,返回的是None,因此无法来取值
# print(a3.group())
#
# print(a0.groups())                  # ????
# print(a1.groups())
# # # print(a2.groups())     # 报错,因为匹配不到,返回的是None,因此无法来取值
# print(a3.groups())
#
# # D:Anaconda3python.exe D:/C_cache/py/day23-re_logging_hashlib_MoKuaiDaoRu/day23_1_re_.py
# # 2
# # 22
# # 55
# # ()
# # ()
# # ()
# #
# # Process finished with exit code 0
#






'''
# ------------------------------------------------------------
# # 7、re.group("标签"),在re.search("(?P<标签>匹配内容与规则)",被匹配字符串)的应用
# # #
# ------------------------------------------------------------
'''
#
# import re
#
# a0 = re.search("(?P<age>d+)","asfd22af33asf555")
# a1 = re.search("(?P<name>[a-z]+)","asfd22af33asf555")
# a2 = re.search("(?P<name>[a-z]+)(?P<age>d+)","asfd22af33asf555")
#
# print(a0.group())
# print(a0.group("age"))
# print(a1.group("name"))
# print(a2.group())
# print(a2.group("name"), a2.group("age"))
#
# # D:Anaconda3python.exe D:/C_cache/py/day23-re_logging_hashlib_MoKuaiDaoRu/day23_1_re_.py
# # 22
# # 22
# # asfd
# # asfd22
# # asfd 22
# #
# # Process finished with exit code 0






'''
# ------------------------------------------------------------
# # 8、re.group("标签"),在re.search("(?P<标签>匹配内容与规则)",被匹配字符串)的应用
# # #
# ------------------------------------------------------------
'''
#
# import re
#
# a0 = re.search("(?P<age>d+)","asfd22af33asf555")
# a1 = re.search("(?P<name>[a-z]+)","asfd22af33asf555")
# a2 = re.search("(?P<name>[a-z]+)(?P<age>d+)","asfd22af33asf555")
#
# print("a0.groups() :        ",a0.groups())
# print("a0.groups("age") :   ",a0.groups("age"))
# print("a1.groups("name") :  ",a1.groups("name"))
# print("a2.groups() :        ",a2.groups())
# print("a2.groups("name") :  ",a2.groups("name"),"a2.groups("age"):    ", a2.group("age"))
#
# # D:Anaconda3python.exe D:/C_cache/py/day23-re_logging_hashlib_MoKuaiDaoRu/day23_1_re_.py
# # a0.groups() :         ('22',)
# # a0.groups("age") :    ('22',)
# # a1.groups("name") :   ('asfd',)
# # a2.groups() :         ('asfd', '22')
# # a2.groups("name") :   ('asfd', '22') a2.groups("age"):     22
# #
# # Process finished with exit code 0






# 03  re模块之方法
# 03  re模块之方法

'''
# ------------------------------------------------------------
# # 9、re方法的使用
# # # findall、search使用的比较多
# # # march等用的比较少
# ------------------------------------------------------------
'''







'''
# ------------------------------------------------------------
# # 10、re.match
# # # re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,
# # # match()就返回none。 相当于search方法加元字符^
# # # 
# # # re.match(pattern, string, flags=0)
# # # pattern	匹配的正则表达式
# # # string	要匹配的字符串。
# # # flags	标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志
# ------------------------------------------------------------
'''
#
# import re
# a = re.match("d+","asfd22sf33sfd4444")
# a1 = re.match("d+","22sf33sfd4444")
#
# print(a)
# print(a1)
#
# # D:Anaconda3python.exe D:/C_cache/py/day23-re_logging_hashlib_MoKuaiDaoRu/day23_1_re_.py
# # None
# # <_sre.SRE_Match object; span=(0, 2), match='22'>
# #
# # Process finished with exit code 0







'''
# ------------------------------------------------------------
# # 11、re.match.group
# # # 作用于re.search.group相同,见上面
# ------------------------------------------------------------
'''
#
# import re
# a = re.match("d+","asfd22sf33sfd4444")
# a1 = re.match("d+","22sf33sfd4444")
#
# print(a)
# print(a1.group())
#
# # D:Anaconda3python.exe D:/C_cache/py/day23-re_logging_hashlib_MoKuaiDaoRu/day23_1_re_.py
# # None
# # 22
# #
# # Process finished with exit code 0






'''
# ------------------------------------------------------------
# # 12、re.split
# # # split 方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下:
# # # 
# # # re.split(pattern, string[, maxsplit=0, flags=0])
# # # pattern	匹配的正则表达式
# # # string	要匹配的字符串。
# # # maxsplit	分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。
# # # flags	    标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
# # #           参见:正则表达式修饰符 - 可选标志
# ------------------------------------------------------------
'''
#
# import re
# a = re.split(" ","hello abc def")
# a1 = re.split("[ |]","hello abc|def")
# a2 = re.split("b","abc")
# a3 = re.split("[b]","abc")
#
# # 先取出分隔字符“a”: "abc"-->"","bc"(说明abc左边没有字符,因此为空)
# # 再取出分隔字符“b”: ("",)"bc"( 括号内表示原来的)-->"","","c"(说明bc左边没有字符,因此为空)
# a4 = re.split("[ab]","abc")
#
# # 先取出分隔字符“a”: "asdabcdabcdassbs"-->("",)"sd","bcd","bcd","ssbs"
# # 再取出分隔字符“b”: ("",)"sd","bcd","bcd","ssbs"--> ("",)"sd","","cd","","cd","ss","s"
# a5 = re.split("[ab]","asdabcdabcdassbs")
#
# print("a    ",a)
# print("a1   ",a1)
# print("a2   ",a2)
# print("a3   ",a3)
# print("a4   ",a4)
# print("a5"  ,a5)
#
#
# # D:Anaconda3python.exe D:/C_cache/py/day23-re_logging_hashlib_MoKuaiDaoRu/day23_1_re_.py
# # a     ['hello', 'abc', 'def']
# # a1    ['hello', 'abc', 'def']
# # a2    ['a', 'c']
# # a3    ['a', 'c']
# # a4    ['', '', 'c']
# # a5 ['', 'sd', '', 'cd', '', 'cd', 'ss', 's']
# #
# # Process finished with exit code 0














'''
# ------------------------------------------------------------
# # 13、re.sub
# # # Python 的 re 模块提供了re.sub用于替换字符串中的匹配项。
# # # 
# # # re.sub(pattern, repl, string, count=0, flags=0)
# # # pattern : 正则中的模式字符串。
# # # repl :    替换的字符串,也可为一个函数。
# # # string :  要被查找替换的原始字符串。
# # # count :   模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
# ------------------------------------------------------------
'''
#
# import re
# a  = re.sub("d+","??","hello22abc33def44444")      # 连续整数看成一个整体,替换为两个“?”
# a1 = re.sub("d","??","hello22abc33def44444")       # 一个整数替换为两个“?”
#
# a2 = re.sub("d+","??","hello22abc33def44444",1)
# a3 = re.sub("d","??","hello22abc33def44444",1)
#
#
# print("a    ",a)
# print("a1   ",a1)
# print("a2   ",a2)
# print("a3   ",a3)
#
# # D:Anaconda3python.exe D:/C_cache/py/day23-re_logging_hashlib_MoKuaiDaoRu/day23_1_re_.py
# # a     hello??abc??def??
# # a1    hello????abc????def??????????
# # a2    hello??abc33def44444
# # a3    hello??2abc33def44444
# #
# # Process finished with exit code 0








'''
# ------------------------------------------------------------
# # 14、re.subn
# # # Python 的 re 模块提供了re.subn用于替换字符串中的匹配项。并且返回替换的次数
# ------------------------------------------------------------
'''
#
# import re
# a  = re.subn("d+","??","hello22abc33def44444")      # 连续整数看成一个整体,替换为两个“?”
# a1 = re.subn("d","??","hello22abc33def44444")       # 一个整数替换为两个“?”
#
# a2 = re.subn("d+","??","hello22abc33def44444",1)
# a3 = re.subn("d","??","hello22abc33def44444",1)
#
#
# print("a    ",a)
# print("a1   ",a1)
# print("a2   ",a2)
# print("a3   ",a3)
# #
# # D:Anaconda3python.exe D:/C_cache/py/day23-re_logging_hashlib_MoKuaiDaoRu/day23_1_re_.py
# # a     ('hello??abc??def??', 3)
# # a1    ('hello????abc????def??????????', 9)
# # a2    ('hello??abc33def44444', 1)
# # a3    ('hello??2abc33def44444', 1)
# #
# # Process finished with exit code 0








'''
# ------------------------------------------------------------
# # 15、re.compile
# # # compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,
# # # 供 match() 和 search() 这两个函数使用。
# # # ===>>>只有少数使用的时候,使用该方式与不用,差别不大;但是在数量非常多的时候,能够非常
# # # ===>>>显著的提高程序的运行效率,原因在于,compile提前进行的编译处理,以后用到的该方法都可以不用重新
# # # ===>>>编译就可以使用
# # #  
# # # re.compile(pattern[, flags])
# # # pattern : 一个字符串形式的正则表达式
# # # flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
# # # re.I 忽略大小写
# # # re.L 表示特殊字符集 w, W, , B, s, S 依赖于当前环境
# # # re.M 多行模式
# # # re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
# # # re.U 表示特殊字符集 w, W, , B, d, D, s, S 依赖于 Unicode 字符属性数据库
# # # re.X 为了增加可读性,忽略空格和 # 后面的注释
# ------------------------------------------------------------
'''
#
# import re
# #
# com_num = re.compile("d+")
# a  = com_num.subn("??","hello22abc33def44444")      # 连续整数看成一个整体,替换为两个“?”
# a1 = com_num.subn("??","hello22abc33def44444")       # 一个整数替换为两个“?”
#
# a2 = com_num.subn("??","hello22abc33def44444",1)
# a3 = com_num.subn("??","hello22abc33def44444",1)
#
#
# print("a    ",a)
# print("a1   ",a1)
# print("a2   ",a2)
# print("a3   ",a3)
# #
# # D:Anaconda3python.exe D:/C_cache/py/day23-re_logging_hashlib_MoKuaiDaoRu/day23_1_re_.py
# # a     ('hello??abc??def??', 3)
# # a1    ('hello????abc????def??????????', 9)
# # a2    ('hello??abc33def44444', 1)
# # a3    ('hello??2abc33def44444', 1)
# #
# # Process finished with exit code 0
#









'''
# ------------------------------------------------------------
# # 15、re.finditer
# # # 和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
# # # 
# # # re.finditer(pattern, string, flags=0)
# # # pattern	匹配的正则表达式
# # # string	要匹配的字符串。
# # # flags	标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表
# # # 达式修饰符 - 可选标志
# ------------------------------------------------------------
'''
#
# import re
# a  = re.finditer("d+","hello22abc33def44444")      # 连续整数看成一个整体,替换为两个“?”
# a1 = re.finditer("d","hello22abc33def44444")       # 一个整数替换为两个“?”
#
# a2 = re.finditer("d+","hello22abc33def44444")
# a3 = re.finditer("d","hello22abc33def44444")
#
#
# print("a    ",a,a.__next__(),"---->>",next(a).group())
# print("a1   ",a1,a1.__next__()," ---->>",next(a1).group())
# print("a2   ",a2,a2.__next__(),"---->>",next(a2).group())
# print("a3   ",a3,a3.__next__()," ---->>",next(a3).group())
#
# # D:Anaconda3python.exe D:/C_cache/py/day23-re_logging_hashlib_MoKuaiDaoRu/day23_1_re_.py
# # a     <callable_iterator object at 0x0000000002971278> <_sre.SRE_Match object; span=(5, 7), match='22'> ---->> 33
# # a1    <callable_iterator object at 0x0000000002956E10> <_sre.SRE_Match object; span=(5, 6), match='2'>  ---->> 2
# # a2    <callable_iterator object at 0x00000000039C7FD0> <_sre.SRE_Match object; span=(5, 7), match='22'> ---->> 33
# # a3    <callable_iterator object at 0x00000000039C7F98> <_sre.SRE_Match object; span=(5, 6), match='2'>  ---->> 2
# #
# # Process finished with exit code 0







'''
# ------------------------------------------------------------
# # 16、findall、search在计算表达式中的应用
# # # 使用search 能逐次的将计算表达式中的内容取出来,清晰明了
# # # 使用findall一次性将计算表达式中的内容取出来
# # # 相比之下,在计算表达式上,search更合适一些
# ------------------------------------------------------------
'''
#
# import re
# s = "12+(34*6+2-5*(10-2*3)+(4*4+4)"
# a = re.findall("([^()]+)",s)
# a1 = re.search("([^()]+)",s)
#
# print("a    ",a)
# print("a1   ",a1,"  group方法:",a1.group())
#
# # D:Anaconda3python.exe D:/C_cache/py/day23-re_logging_hashlib_MoKuaiDaoRu/day23_1_re_.py
# # a     ['(10-2*3)', '(4*4+4)']
# # a1    <_sre.SRE_Match object; span=(13, 21), match='(10-2*3)'>   group方法: (10-2*3)
# #
# # Process finished with exit code 0

  





原文地址:https://www.cnblogs.com/jyfootprint/p/9449454.html