分享

python re模块

 小猪窝969 2018-12-10
mport re

#match 从要被匹配的字符串开头开始匹配, 如果没有匹配到返回None
a = re.match("c","abc")
#search 在被匹配的字符串中寻找匹配,如果使用^就等价于match
a = re.search("c","abc").group()
a = re.search("^c","abc")
#返回一个正则表达式对象
pattern = re.compile("A").search("ABC").group()
#print("patt:",pattern)
#a=pattern.search("ABD").group()
#根据模式分割字符串,返回列表
a=re.split(", ","a, b, d")

#找到a用A替换,re.subn返回替换了多少次,可以规定替换次数
a = re.sub("a","A","all",)
#findall全字符串匹配,返回一个列表
a = re.findall("a","aafdsfaafafasfsf")
#
# all =re.finditer("a","adaddadsddsdaddsdd")
# for a in all:
# print(a.group())
pat=re.compile(r'(?P<K>a)\w(c)') #分2组:命名分组+匿名分组
print(pat.search('abcdef').groups("K")) #取所有分组,元组形式返回


string1 = "<span>hello world</span>hello world"
rs = re.match("(?P<span_contexts><span>(.*)</span>)",string1)
print(rs.group())
#(正则表达式)----》为匿名分组, (?P<name>------》正则表达式) 有名分组。***P为大写,
# (?P=name)---->引用命名分组匹配到的值,P为大写 ,(?P=N)引用组名为N的分组匹配到的值“hello world”
#引用分组匹配到的值用\2 --->引用分组2(?P(N)匹配的值“hello world”)
rs = re.compile(r"(?P<K><span>(?P<N>.*)</span>)\2").search(string1)
print(rs.group())
#括号里面有(?:) 表示不是一个分组  <span>(?:.*)</span>中(.*)不是一个无名分组
rs = re.compile(r"<span>(?:.*)</span>").search(string1)
print(rs.groups()) #取不到分组 返回一个空元组

#(?=)向要匹配的字符串后匹配,匹配后面是数字的字母或者数字
res = re.compile(r"\w(?=\d)").findall("abc1 def1 xyz1")
print(res)
#(?!)和(?=)对字符串后匹配,匹配字符串后不是数字的字母或者数字
res = re.compile(r"\w(?!\d)").findall("abc1 def1 xyz1")
print(res)
#(?<=),(?<!) 向前匹配 = 表示匹配字符串前面是什么的内容,!表示字符串前面不是什么的内容
>>> pat=re.compile(r'(?<=\d)[A-Za-z]+') #匹配前面是数字的字母
>>> pat.findall('abc21,def31,xyz41')
[]
>>> pat.findall('1abc21,2def31,3xyz41')
['abc', 'def', 'xyz']

===========================================
>>> pat=re.compile(r'(?<!\d)[A-Za-z]+') #匹配前面不是数字的字母
>>> pat.findall('abc21,def31,xyz41')
['abc', 'def', 'xyz']
>>> pat.findall('zhoujy20130628hangzhou123,12,binjiang310')
['zhoujy', 'angzhou', 'binjiang']

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多