Python 正则表达式常用方法示例汇总

本贴最后更新于 2155 天前,其中的信息可能已经水流花落

RE 模块的方法

RE 正则表达式 写法(词组整体出现次数的写法)

相比常规的正则表达式,词组的写法是添加?:这个特殊标志
最外围()是需要截取的字符串
此问题参考网站

>>>pattern_index=re.compile(r'((?:qsyn\-)?logstash[\-a-z0-9\.]+)') ### 用来匹配带有qsyn- 和不带qsyn- 的字符串
>>>pattern_index.findall("green  open   qsyn-logstash-logs-2018.12.20     zdmqszKURqGmnfUxr6CkwQ   ")
['qsyn-logstash-logs-2018.12.20']
>>>pattern_index.findall("green  open   logstash-logs-2018.12.20     zdmqszKURqGmnfUxr6CkwQ   ")
['logstash-logs-2018.12.20']
>>>pattern_index=re.compile(r'((?:qsyn\-)?logstash[\-a-z0-9\.]+)0')
>>>pattern_index.findall("green  open   logstash-logs-2018.12.20     zdmqszKURqGmnfUxr6CkwQ   ")
['logstash-logs-2018.12.2']  ####  注意表达式的区别,并且外围() 的区别
re.compile(pattern) ## 将正则表达式pattern 编译成 pattern对象
parttern=re.compile(r'[0-9]+\.com$')

## match (默认从头部开始匹配,除非特殊指定起始位置)返回 字符串对象
a=parttern.match('123.com') ## match 匹配以后返回 字符串对象
print a
<_sre.SRE_Match object at 0x10cd838b8>
a.group()
'123.com'
## 不区分大小写 和 分组示例
pattern=re.compile(r"([a-z]+) ([a-z]+)",re.I) ### 不区分大小写;分组
m=pattern.match("hello wWWWd")
m.group()
'hello wWWWd'
m.group(1)
'hello'
m.group(2)
'wWWWd'
m.span(0)    # 返回匹配成功的整个子串的索引
(0, 11)


## search 较match比较,可以匹配任意位置,匹配一次成功后则完成;注意以下区别
m=pattern.match("123hello worLD")
print m
None
m=pattern.search("123hello worLD")
print m
<_sre.SRE_Match object at 0x10d038250>

findall 方法: 以列表形式查找所有匹配的结果,如果有则返回列表

finditer 方法:类似于 findall,不过返回的是 iter 迭代对象

m=pattern.findall("123hello worLD 23423ECH WORLDBEST")
print m
[('hello', 'worLD'), ('ECH', 'WORLDBEST')
pattern2=re.compile(r"[a-z]+",re.I)
n=pattern2.findall("123hello worLD 23423ECH WORLDBES")
print n
['hello', 'worLD', 'ECH', 'WORLDBES']
### find iter
t=pattern2.finditer("123hello worLD 23423ECH WORLDBES")
for i in t:
    print i.group()
    
hello
worLD
ECH
WORLDBES

t=pattern2.finditer("123hello worLD 23423ECH WORLDBES")
for i in t:
    print i
    
<_sre.SRE_Match object at 0x10cd83988>
<_sre.SRE_Match object at 0x10cd839f0>
<_sre.SRE_Match object at 0x10cd83988>
<_sre.SRE_Match object at 0x10cd839f0>

split 方法: 可以理解成取反,即将匹配到的字符串的分隔符(分割字符串)以列表的形式返回.常用于多个分隔符分割字符串时使用。

p=pattern2.split("123hello worLD 23423ECH WORLDBES")
print p
['123', ' ', ' 23423', ' ', '']
n=pattern2.findall("123hello worLD 23423ECH WORLDBES")
print n
['hello', 'worLD', 'ECH', 'WORLDBES'
>>>print test
a-b-c.d.e.f.g
>>>print re.split(r"[.\-]",test)
['a', 'b', 'c', 'd', 'e', 'f', 'g']



sub 方法: 用于替换,shell 中的 sed

sub(repl, string[, count]) :

pattern3=re.compile(r"[0-9]+")
s="hello123world456"
p=pattern3.sub("AAAAAA",s) ## 用AAAAAA 替换所有匹配到的
print p
helloAAAAAAworldAAAAAA
def fun(m):
    return "hi"+m.group()
p=pattern3.sub(fun,s)  ## 利用def 的 fun函数将匹配到的结果进行处理后替换。注意group() 的使用
print p
hellohi123worldhi456
p=pattern3.sub(fun,s,1)  ## 只匹配一次
print p
hellohi123world456

subn 方法:与 sub 的方法行为类似,也用于替换:返回一个元组(字符串,匹配次数)

p=pattern3.subn("AAAAAA",s)
print p
('helloAAAAAAworldAAAAAA', 2)
p=pattern3.subn(fun,s)
print p
('hellohi123worldhi456', 2)
p=pattern3.subn(fun,s,1)
print p
('hellohi123world456', 1)

  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    545 引用 • 672 回帖
  • RE
    2 引用

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...