Python-正则表达式

正则表达式是用于文本匹配的工具,在源字符串中查找与给定的正则表达式相匹配的部分。一个正则表达式由字母、数字和特殊符号(括号、星号、问号等)组成。一般采用re模块处理正则表达式。

re模块提供了一些根据正则表达式进行查找、替换、分隔字符串的函数,这些函数使用一个正则表达式作为第一个参数。采用re模块中的函数可对字符串进行特定处理。

findall(pattern,string,flags=0)

根据pattern在string中匹配字符串。如果匹配成功,返回包含匹配结果的列表,否则返回空列表。

importre

#正则表达式

str='小明xiaomingXIAOMING13620613118 (020)-12345678

02012345678 020-12345678'

#匹配手机号或者固话号码

print(re.findall(r'[(]?\d[)]?[-]?\d',str))

#匹配中文名字

print(re.findall(r'[\u4E00-\u9FA5]',str))

#匹配小写名字拼音

print(re.findall(r'[a-z]',str))

#匹配大写名字拼音

print(re.findall(r'[A-Z]',str))

#匹配名字拼音(忽略大小写)

print(re.findall(r'[A-Z]',str,re.I))

#匹配任意字符串

print(re.findall(r'.*',str))

out:

['13620613118','(020)-12345678',

'02012345678','020-12345678']

['小明']

['xiaoming']

['XIAOMING']

['xiaoming','XIAOMING']

['小明xiaomingXIAOMING13620613118 (020)-12345678

02012345678 020-12345678','']

sub(pattern,repl,string,count=0)

根据指定的正则表达式替换源字符串中的子串。如果count=0,则返回string中匹配的所有结果;如果count>0,则返回count个匹配结果。

importre

#正则表达式

str='小明xiaomingXIAOMING小明13620613118 小明

(020)-12345678 02012345678 020-12345678'

#将文字 小明全部替换成小黑

print(re.sub(r'[\u4E00-\u9FA5]','小黑',str))

#将文字 前面2个小明替换成小黑

print(re.sub(r'[\u4E00-\u9FA5]',

'小黑',str,count=2))

out:

小黑xiaomingXIAOMING小黑13620613118 小黑

(020)-12345678 02012345678 020-12345678

小黑xiaomingXIAOMING小黑13620613118 小明

(020)-12345678 02012345678 020-12345678

subn(pattern,repl,string,count=0)

作用和sub()相同,返回1个2元的元祖。第1个元素是替换结果,第2个元素是替换的次数。

importre

#正则表达式

str='小明xiaomingXIAOMING小明13620613118

小明(020)-12345678 02012345678 020-12345678'

#将文字 小明全部替换成小黑,结果显示替换了3次

print(re.subn(r'[\u4E00-\u9FA5]','小黑',str))

#将文字 前面2个小明替换成小黑,

结果根据指定的2次替换值一致

print(re.subn(r'[\u4E00-\u9FA5]','小黑'

,str,count=2))

out:

‍('小黑xiaomingXIAOMING小黑13620613118 小黑

(020)-12345678 02012345678 020-12345678',3)

('小黑xiaomingXIAOMING小黑13620613118 小明

(020)-12345678 02012345678 020-12345678',2)‍

match(pattern,string,flags=0)

根据pattern从string头部开始匹配字符串,只返回第1次匹配成功的对象。否则返回None。

importre

#正则表达式

str='小明xiaomingXIAOMING小明'

str1='xiaomingXIAOMING小明'

print(re.match(r'[\u4E00-\u9FA5]',str))

print(re.match(r'[\u4E00-\u9FA5]',str1))

out:

match='小明'>

None

search(pattern,string,flags=0)

根据pattern字string中匹配字符串,只返回第1次匹配成功的结果,否则返回None。

importre

#正则表达式

str='小明xiaomingXIAOMING小明'

str1='xiaomingXIAOMING小明'

print(re.search(r'[\u4E00-\u9FA5]',str))

print(re.search(r'[\u4E00-\u9FA5]',str1))

out:

match='小明'>

match='小明'>

compile(pattern,flags=0)

编译正则表达式pattern,返回1个Pattern对象。

importre

#正则表达式

str='小明xiaomingXIAOMING小明'

print(re.compile(r'[\u4E00-\u9FA5]'))

out:

re.compile('[\\u4E00-\\u9FA5]')

split(pattern,string,maxsplit=0)

根据pattern分隔string,maxsplit表示最大的分隔数。

importre

#正则表达式

str='小明xiaomingXIAOMING小明'

print(re.split(r'[\u4E00-\u9FA5]',str))

print(re.split(r'[\u4E00-\u9FA5]',str,1))

out:

['','xiaomingXIAOMING','']

['','xiaomingXIAOMING小明']

escape(pattern)

匹配字符串中的特殊符号,如“*”、“+”、“?”等。escape函数可理解为为特殊符号加上“\”,以减少特殊符号过多时“\”的输入繁琐。

re模块常用函数表

re模块规则选项(flags选项值)

Pattern对象的属性和方法

importre

str='小明*xiaom?ingXIAO+MING小明'

s=re.compile(r'[a-z]')

print(s.findall(str))

print(s.findall(str[5:]))

print(s.pattern)

out:

['xia','ing']

['aom','ing']

[a-z]{3}

Pattern对象的属性和方法表

match对象的属性和方法

importre

str='xiaoxiaoxiaoxiao'

s=re.compile(r'([a-z])\1')#\1再次调用该分组

m=s.match(str)

print(m)

print(m.group())

print(m.group(1))

print(m.group())

#(?Pxiao)给分组命名为one,

并定义一个分组(xiao);

# (?P=one)使用分组名为one的分组,

即再次调用分组(xiao),相当于”\1"

s=re.compile(r'(?Pxiao)(?P=one)')

m=s.match(str)

print(m.group('one'))

print(m.groupdict().keys())

print(m.groupdict().values())

print(m.re.pattern)

out:

xiaoxiao

xiao

xiaoxiao

xiao

dict_keys(['one'])

dict_values(['xiao'])

(?Pxiao)(?P=one)

match对象的属性和方法表

正则表达式特殊字符表

正则表达式常用限定符表

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180408G01XS600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券