python 字符串之常用正则

一、前面简单写了一下re模块操作字符串的写法,加上正则之后 re模块才能发挥更强大的功能。

先看看常见的正则符号:

复习一下基础的re模块:

import re
text = ‘c++ python2 python3 perl ruby lua java javascript php4 php5 c‘

#match,search,findall,split,sub
re.match(r‘java‘,text)#只找头,没有的话返回none 返回一个<_sre.SRE_Match object; span=(34, 38), match=‘java‘>

re.search(r‘java‘,text)#从头开始找,找符合的字符
# <_sre.SRE_Match object; span=(34, 38), match=‘java‘>

re.match(r‘c\++‘,text),re.match(r‘c\+\+‘,text)#作用相同
#<_sre.SRE_Match object; span=(0, 3), match=‘c++‘>

re.findall(r‘python‘,text) #返回所有的python
# [‘python‘, ‘python‘]

re.split(r‘ perl ‘,text)#以某个字符为中心拆分
#[‘c++ python2 python3‘, ‘ruby lua java javascript php4 php5 c‘]

re.sub(r‘ruby‘,‘fortran‘,text) #替换某个字符
#‘c++ python2 python3 perl fortran lua java javascript php4 php5 c‘

二、正则常用

text = ‘c++ python2 python3 perl ruby lua java javascript php4 php5 c‘
1 ^   start 从开头开始匹配   例:  re.findall(r‘^c..‘,text)        输出#[‘c++‘]

2 .   except \n 匹配除换行符以外所有字符    re.findall(r‘^c‘,text)      #[‘c‘]re.findall(r‘^c.‘,text)#[‘c+‘]

3 +   1-inf 匹配一个或一个以上相同的值从1---无穷   re.findall(r‘c+‘,text)    #[‘c‘, ‘c‘, ‘c‘]   re.findall(r‘c\++‘,text)    #[‘c++‘]

4 $   end 匹配最后一个字符    re.findall(r‘c$‘,text)
5 []  or  指的是或  re.findall(r‘p[a-zA-Z]+‘,text) #匹配p字符后面是(a-z)从小写字符a-z和大写A-Z的字符 #{1,}匹配1到无穷个    #[‘python‘, ‘python‘, ‘perl‘, ‘pt‘, ‘php‘, ‘php‘]

6 *   0-inf 0到无穷个  re.findall(r‘p[a-zA-Z]*‘,text)    #[‘python‘, ‘python‘, ‘perl‘, ‘pt‘, ‘php‘, ‘php‘]

7 ?   0-1 匹配0--1个  re.findall(r‘p[a-zA-Z]?‘,text)    #[‘py‘, ‘py‘, ‘pe‘, ‘pt‘, ‘ph‘,‘p‘, ‘ph‘, ‘p‘]  re.findall(r‘p[a-zA-Z0-9]{3,}‘,text) #{3,}指的是匹配三个字母以上    #[‘python2‘, ‘python3‘, ‘perl‘, ‘php4‘, ‘php5‘]

  re.findall(r‘c[a-zA-Z]*‘,text)    #[‘c‘, ‘cript‘, ‘c‘]  re.findall(r‘c[^a-zA-Z]*‘,text)  # ^号也可以指非的意思(当^号在中括号里面) 匹配非字母的符号    #[‘c++ ‘, ‘c‘, ‘c‘]

8 | or 或也可以写成|号 看看他与[]号的区别  re.findall(r‘[pj][a-zA-Z]+‘,text)  #{1,inf}    #[‘python‘, ‘python‘, ‘perl‘, ‘java‘, ‘javascript‘, ‘php‘, ‘php‘]  |重写上面的pattern  re.findall(r‘p|j[a-zA-Z]+‘,text) #|号指的是前面的或者是后面的因此需要修改程序    #[‘p‘, ‘p‘, ‘p‘, ‘java‘, ‘javascript‘, ‘p‘, ‘p‘, ‘p‘, ‘p‘]  re.findall(r‘p[a-zA-z]+|j[a-zA-Z]+‘,text) #相当于[pj][a-z][A-Z]的分开  re.findall(r‘p[^0-9]+|j[a-zA-Z]+‘,text) #注意空格也会被匹配为非数字    #[‘python‘, ‘python‘, ‘perl ruby lua java javascript php‘, ‘php‘]  re.findall(r‘p[^0-9 ]+|j[a-zA-Z]+‘,text)    #[‘python‘, ‘python‘, ‘perl‘, ‘java‘, ‘javascript‘, ‘php‘, ‘php‘]

9 \w  [a-zA-Z0-9_], \W #匹配所有的小写大写下划线 \W指的是\w的非

  re.findall(r‘p\w+‘,text)
    #[‘python2‘, ‘python3‘, ‘perl‘, ‘pt‘, ‘php4‘, ‘php5‘]10 \d  [0-9], \D ##匹配所有的数字  \D是\d的非  re.findall(r‘p\w+\d‘,text)  re.findall(r‘p\w+[0-9]‘,text)  re.findall(r‘p\w{5,9}‘,text) #匹配有5--9个字符    #[‘python2‘, ‘python3‘]

11 \s  [ \t\n\r\f\v], \S#匹配所有的空白字符

12 \b  word boundary 匹配一个字符的边界,以什么开始什么结束  re.findall(r‘\bp[^0-9]‘,text)    #[‘py‘, ‘py‘, ‘pe‘, ‘ph‘, ‘ph‘]  re.findall(r‘p[^0-9]\b‘,text)    #[‘pt‘]13 \B  not \b  \A  input start, ^   \Z  input end, $ 同上

 14 贪婪与非贪婪
 *贪婪模式尽可能的匹配多 *?  0~inf non-greedy #非贪婪模式尽可能匹配少 +?  1~inf non-greedy #非贪婪模式尽可能匹配少re.findall(r‘p[a-z]*‘,text)  #[‘python‘, ‘python‘, ‘perl‘, ‘pt‘, ‘php‘, ‘php‘]re.findall(r‘p[a-z]*?‘,text)  #[‘p‘, ‘p‘, ‘p‘, ‘p‘, ‘p‘, ‘p‘, ‘p‘, ‘p‘]re.findall(r‘p[a-z]+\b‘,text)re.findall(r‘p[a-z]+?\b‘,text)

15 分组
(?P<name>pattern)a=re.search(r‘(p[a-zA-Z]+)([0-9])‘,‘python2‘,re.X) #re.X可以不写(re.X)编译字符里面可以注释a.group(1), a.group(2)  #‘python‘  #‘2‘

a=re.search(r‘(?P<name>p[a-zA-Z]+)(?P<version>[0-9])‘,‘python2‘) #以字典形式输出a.group(‘name‘), a.group(‘version‘)a.groupdict()  #{‘name‘: ‘python‘, ‘version‘: ‘2‘}
16 混合编写pattern = re.compile(r‘(?P<name>p[a-zA-Z]+)(?P<version>[0-9])‘)#公式results = pattern.search(‘python2‘)#带入print (results.groupdict())results = pattern.search(‘python3‘)print (results.groupdict())results = pattern.search(‘php4‘)print (results.groupdict())  #{‘name‘: ‘python‘, ‘version‘: ‘3‘}
17 字典循环import retext = ‘c++ python2 python3 perl ruby lua java javascript php4 php5 c‘pattern = re.compile(r‘(?P<name>p[a-zA-Z]+)(?P<version>[0-9])‘)#公式for t in text.split(‘ ‘):    results = pattern.search(t)    if results:      print (results.groupdict())  #{‘name‘: ‘python‘, ‘version‘: ‘2‘}  #{‘name‘: ‘python‘, ‘version‘: ‘3‘}  #{‘name‘: ‘php‘, ‘version‘: ‘4‘}  #{‘name‘: ‘php‘, ‘version‘: ‘5‘}
18 编译字符re.Xa = re.compile(r"""\d +  # 整数部分                   \.    # 小数点                   \d *  # 小数部分                """, re.X) #可以转化成一行b = re.compile(r"\d+\.\d*")


原文地址:https://www.cnblogs.com/jeepzp/p/8257177.html

时间: 2024-08-30 07:44:16

python 字符串之常用正则的相关文章

Python字符串的常用操作学习

1 >>> name = "I love my job!" 2 >>> name.capitalize() #首字母大写 3 'I love my job!' 4 >>> name.count("o") #统计字母个数 5 2 6 >>> name.center(50,"-") #输出50个字符,不够以"-"补全,并且name放在中间;name.ljust

python 字符串和常用数据结构

字符串和常用数据结构 使用字符串 第二次世界大战促使了现代电子计算机的诞生,当初的想法很简单,就是用计算机来计算导弹的弹道,因此在计算机刚刚诞生的那个年代,计算机处理的信息主要是数值,而世界上的第一台电子计算机ENIAC每秒钟能够完成约5000次浮点运算.随着时间的推移,虽然对数值运算仍然是计算机日常工作中最为重要的事情之一,但是今天的计算机处理得更多的数据都是以文本信息的方式存在的,而Python表示文本信息的方式我们在很早以前就说过了,那就是字符串类型.所谓字符串,就是由零个或多个字符组成的

Python—字符串和常用数据结构

目录 1. 字符串 2. 列表 2.1 列表的增删改查 2.2 列表的切片和排序 2.3 生成式语法 3. 元组 4.集合 5. 字典 5.1 字典的增删改查 5.2 字典的常见操作 序言:这一章我们学习字符串.列表.元组.字典 等常用存储结构 1. 字符串 所谓字符串,就是由零个或多个字符组成的有限序列 ,简单来说:双引号或者单引号中的数据,就是字符串 通过下面代码,我们来了解一下字符串的使用 # -*- coding:utf-8 -*- def main(): str1 = 'hello w

python 字符串替换、正则查找替换

import re if __name__ == "__main__": url = " \n deded<a href = "">这是第一个链接</a><a href = "">这是第二个链接</a> \n " # 去除\n one = url.replace("\n", "") # 去掉两端空格 two = one.strip() #

python字符串的常用操作

字符串转列表: s='spam' l = list(s) l2 = "hello world".spilt() 列表转字符串 k = ''.join(l) 注意,不能join列表中的非字符串 3.修改字符串 s = s + 'a' s = s[3:] + 'b' s = s.replace('pl','pa') a = '' #赋值空 del a #整个变量删除 4.索引和分片 索引s[i] s[0]首个 s[-1] = s[len(s)-1] 倒数第一个 分片s[i:j] 不含上边界

python字符串常用操作方法

python字符串常用操作方法 python字符串操作常用操作,如字符串的替换.删除.截取.复制.连接.比较.查找.分割等,需要的朋友可以参考下. 1.去除空格str.strip():删除字符串两边的指定字符,括号的写入指定字符,默认为空格 1 >>> a=' hello ' 2 >>> b=a.strip() 3 >>> print(b) 4 hello str.lstrip():删除字符串左边的指定字符,括号的写入指定字符,默认为空格 1 >

python字符串连接方式有哪些

在python开发中,会经常用到python字符串http://www.maiziedu.com/group/article/10646/,在python字符串操作中常用的无外乎就是替换.删除.截取.复制.连接.比较.查询.分割等等,今天小编不给大家讲那么多,就单独讲讲python字符串连接的方式有哪些,今天在写代码,顺便总结一下: 最原始的字符串连接方式:str1 + str2 python 新字符串连接语法:str1, str2 奇怪的字符串方式:str1 str2 % 连接字符串:'nam

Python列表、元组、字典和字符串的常用函数

Python列表.元组.字典和字符串的常用函数 列表方法 1.ls.extend(object) 向列表ls中插入object中的每个元素,object可以是字符串,元组和列表(字符串“abc”中包含3个元组),相当于ls和object合并.注意:object如果是整型,必须以列表的方式传入,不可以以整型或元组的方式传入 2.ls.append(object) 将object作为一个整体插入到ls最后,object可以是字符串,元组,列表和字典 3.ls.insert(index, object

Python(27)_字符串的常用的方法2

#-*-coding:utf-8-*- ''' 字符串操作 ''' s = " bowen " # 从右边删 s1 = s.rstrip() print(len(s1)) s2 = s1.lstrip() print(len(s2)) 从右边删除元素,从左边删除元素,这个在以后项目中经常用到 · 计算个数 #-*-coding:utf-8-*- ''' 字符串操作 ''' s = " boaaweushvaan " s1 = s.count('a') print(s