返回顶部
首页 > 资讯 > 后端开发 > Python >正则表达式 整理(\w \s \d 点
  • 845
分享到

正则表达式 整理(\w \s \d 点

正则表达式 2023-01-31 00:01:20 845人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

re.findall  匹配到正则表达式的字符,匹配到的每个字符存入一个列表,返回一个匹配到的所有字符列表 一. 匹配单个字符 import re # \w 匹配所有字母、数字、下划线 re.findall('\w','abcd_12

re.findall  匹配到正则表达式的字符,匹配到的每个字符存入一个列表,返回一个匹配到的所有字符列表
一. 匹配单个字符
import re
# \w 匹配所有字母、数字、下划线
re.findall('\w','abcd_123    *-')
# 结果为:['a', 'b', 'c', 'd', '_', '1', '2', '3']


# \s 匹配所有不可见字符
#  不可见字符有:\n \t 空格
re.findall('\s','abcd \n\tdf21  ')
# 结果为:[' ', '\n', '\t', ' ', ' ']


# \d 匹配所有数字
re.findall('\d','a1bc3 4d \n\tdf21  ')
# 结果为:['1', '3', '4', '2', '1']


# . 匹配\n换行符以外的所有可见和不可见字符
re.findall('.', 'c3 d\n\td1')
# 结果为:['c', '3', ' ', 'd', '\t', 'd', '1']

二. 匹配多个字符

#匹配多个字符:* + ?
import re
#  * 匹配0或n次
re.findall('\d*', '1a23')
# 结果为:['1', '', '23', '']


#  + 匹配1或n次
re.findall('\d+', '1a23')
# 结果为:['1', '23']
#前面2个是叫贪婪匹配


#  ? 匹配0或1次
re.findall('\d?', '1a3')
# 结果为:['1', '', '3', '']
# 这个叫非贪婪匹配

三. 匹配指定范围字符

# {m,n} 匹配最少m次,最多n次
# {m} 只匹配m次的
# {,n}  匹配最大n次,最小次数不限
# {m,}  匹配最小m次,最大次数不限
re.findall('\d{2,4}', '1a33g134nn12345')
# 结果为:['33', '134', '1234']
re.findall('a{3}', '1aaa3*G+1aaaan#b')
# 结果为:['aaa', 'aaa']


# | 匹配 或 语法的字符
re.findall('1|23|4', '1a33g134nn12345')
# 结果为:['1', '1', '4', '1', '23', '4']


# [ ] 匹配括号内的字符(只匹配单个)
re.findall('[123]', '1a33g134nn12345')
# 结果为:['1', '3', '3', '1', '3', '1', '2', '3']
re.findall('[0-9a-zA-Z]', '1a3*G+1n#')
# 匹配0到9或者a到z或者A到Z单个字符
# 结果为:['1', 'a', '3', 'G', '1', 'n']


# ^x 行首匹配
# x$ 行尾匹配
re.findall('^1', '1a3*G+1n#b')
re.findall('1$', '1a3*G+1n#b')
# 结果为:['1']     
# 结果为:['b']

. 一些比较不常见的匹配
1、\b 单词边界,重点理解在于‘边界’二字,‘单词’代表匹配的字符串

  划定边界基本原则:比如表达式为 '\b单词\b'   的意思就是匹配字符串为‘单词’,单词两边需要存在满足条件的边界才能匹配成功。匹配失败结果肯定是空列表,匹配成功结果就是匹配的单词字符串列表。

  \b在哪边就限制哪边的匹配。

  匹配成功的边界满足条件跟匹配单词字符串有关联,双方是同一类型则失败,不同类型则成功

# 正则表达式中的\b可以用匹配目标单词字符串,加设限制匹配边界
# 单词的 前边界:'\b单词'
#     后边界:'单词\b'
#     前和后边界:'\b单词\b'
# 在\b的使用中有这样几点是需要格外注意的。
# 0. \b本身的含义就有转义字符串的作用,要用字符边界就得将其原始含义去掉,所以需要加r或者\\b(两个不能一起用)

# 1. 单词字符串能否匹配成功是有规律的:
# 如果是a-z,A-Z,0-9,则匹配边界为非字母数字才能匹配成功。
# 如果是非字母数字,则匹配边界为a-z,A-Z,0-9才能匹配成功。
# 如果是两个混在一起,判断标准为那个挨着\b最近的字符作为判断标准,如果是字母数字,则匹配边界为非字母数字才成功,反之亦然。
import re
s='aa abcperty/-aa '
res1=re.findall(r'\babc',s)    # 结果:['abc'] 单词为字母,左匹配边界为非字母数字,匹配成功
res2=re.findall(r'abc\b',s)    # 结果:[]      单词为字母,右匹配边界为字母,匹配失败
print(res1,res2)

s='aa@# perty/-aa '
res3=re.findall(r'\b@#',s)     # 结果:['@#']  单词为非字母数字,左匹配边界为字母,匹配成功
res4=re.findall(r'@#\b',s)     # 结果:[]      单词为非字母数字,右匹配边界为空格(非字母数字),匹配失败
print(res3,res4)

s='aa@a perty/-aa '
res5=re.findall(r'\b@a',s)     # 结果:['@a']  单词为混合,@挨着\b,单词以非字母数字为标准,左匹配边界为字母,匹配成功
res6=re.findall(r'@a\b',s)     # 结果:['@a']  单词为混合,a挨着\b,单词以字母数字为标准,右匹配边界为空格,匹配成功
print(res5,res6)

# 2.字符串的首尾边界默认定义为 非字母数字,所以如果匹配的单词字符串在首尾,则匹配字母数字则会成功,匹配非字母数字失败。
s= 'abcd@'
res7 = re.findall(r'\ba',s)    # 结果:['a'] 单词为字母,左匹配边界为首,默认定义为非字母数字,匹配成功
res8 = re.findall(r'@\b',s)    # 结果:[] 单词为非字母数字,右匹配边界为尾,默认定义为非字母数字,匹配失败
print(res7,res8)

五. 分组

用小括号表示,分组后的正则表达式优先匹配并返回括号内的值

 

六. re模块常用方法

re.search   查找,匹配成功返回第一匹配的字符串,结果为封装的对象(注意search返回的是个对象,.group() 后得到的是字符串不是列表),失败返回None

import re
s = 'welcome world hello python'
res = re.search('hello', s)
print(res)
print(res.group())

# 结果:
<_sre.SRE_Match object; span=(14, 19), match='hello'>
hello

re.match  匹配,在行首匹配字符串,方法同search,区别在于,match在行首匹配,search是从前到后全部查找匹配。

s = 'hello welcome world hello Python'
res=re.match('hello', s)
print(res)
print(res.group())
res1=re.match('welcome',s)
print(res1)

# 结果:
<_sre.SRE_Match object; span=(0, 5), match='hello'>
hello
None

re.split  用匹配成功的字符串作为切割符,进行原字符串的切割,返回一个切割后的列表。匹配失败,直接返回原字符串,不做任何切割处理

匹配成功完成切割
s1 = 'hello welchhome world hello python'
res=re.split('h.+?o',s1)
print(res)

# 结果:
['', ' welc', 'me world ', ' python']

匹配不成功,返回原字符串。不做任何切割处理
s1 = 'hello welchhome world hello python'
res0=re.findall('JSON',s1)
print(res0)
res=re.split('json',s1)
print(res)

# 结果:
[]
['hello welchhome world hello python']

 re.compile 将正则表达式封装成对象,用于重复使用该表达式。使用方法看例子:

s1 = 'hello welchhome world hello python'
pat=re.compile('h.+?o')
res2=pat.findall(s1)
print(res2)

# 结果:
['hello', 'hho', 'hello']

re.sub 替换,重组(group(1)、group(2)...group(n)用\1  \2  ...\n来替换,进行字符串的重新组合(前面要加r防止其转义)

s='<我的博客地址https://www.cnblogs.com/oldboy2019/,欢迎大家来访问、交流,欢迎大家一起探讨python!ohye!>'
# pat=re.compile(r'<(.+)Http://(www.+/),.+>')
pat=re.compile(r'<(.+)http.+(www.+/),(.+?)([a-z]+)!(.+)!>')
print(pat.findall(s))
res=pat.sub(r'\2\n这是\1,\4,\5\3',s)
print(res)

# 结果:
[('我的博客地址', 'www.cnblogs.com/oldboy2019/', '欢迎大家来访问、交流,欢迎大家一起探讨', 'python', 'ohye')]
www.cnblogs.com/oldboy2019/
这是我的博客地址,python,ohye欢迎大家来访问、交流,欢迎大家一起探讨

#注意,这里第二个打印我在前面加了个原义字符r,但是里面\n还是转义成了换行,很奇怪,这个地方欢迎一起交流,为何会出现这种情况呢?

 

 

--结束END--

本文标题: 正则表达式 整理(\w \s \d 点

本文链接: https://lsjlt.com/news/182140.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 正则表达式 整理(\w \s \d 点
    re.findall  匹配到正则表达式的字符,匹配到的每个字符存入一个列表,返回一个匹配到的所有字符列表 一. 匹配单个字符 import re # \w 匹配所有字母、数字、下划线 re.findall('\w','abcd_12...
    99+
    2023-01-31
    正则表达式
  • PHP正则表达式整理之 元字符
    正则表达式的威力源于它可以在模式中拥有选择和重复的能力。 一些字符被赋予 特殊的涵义,使其不再单纯的代表自己,模式中的这种有特殊涵义的编码字符 称为 元字符。 共有两种不同的元字符:一种是可以在模式...
    99+
    2024-02-27
  • 只能输入正整数的正则表达式及常用的正则表达式
    只能输入正整数的正则表达式:^[1-9]\d*$常用的正则表达式:1. 匹配手机号码:^[1][3,4,5,7,8,9]\d{9}$...
    99+
    2023-08-16
    正则表达式
  • 正则表达式
    2019-01-16 作用 :     路由匹配,表单信息的验证  (字符串匹配) 信息提取(在大段文本中提取信息,爬虫) 字符串的提取和校验 []在中括号内匹配任意项  [^]不匹配中括号中的任意一项    [0-9]  0123......
    99+
    2023-01-30
    正则表达式
  • 理解python正则表达式
    在python中,对正则表达式的支持是通过re模块来支持的。使用re的步骤是先把表达式字符串编译成pattern实例,然后在使用pattern去匹配文本获取结果。 其实也有另外一种方式,就是直接使用re模块...
    99+
    2022-06-04
    正则表达式 python
  • ORACLE 正则表达式
    ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与INSTR的功能相似3,REGEXP_SUBSTR :与SUBSTR的...
    99+
    2024-04-02
  • shell正则表达式
         Shell脚本扩展一 正确表达式正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。1. 支持的命令:grep、vim、fi...
    99+
    2024-04-02
  • PHP正则表达式
    什么是正则表达式? 正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文 正则表达...
    99+
    2023-09-02
    正则表达式 php 前端
  • java正则表达式
    目录 一、概念 二、正则表达式语法 三、捕获组 四、Pattern类与Matcher类 1.matches( ) 2.split( ) 3.find( ) 4.group 5.start( )和end( ) 6.replace替换 7.re...
    99+
    2023-09-21
    java 正则表达式
  • qt 正则表达式
      以上是正则表达式的格式说明 以下是自己写的正则表达式  22-25行 是一种设置正则表达式的方式, 29-34行 : 29行 new一个正则表达式的过滤器对象 30行 正则表达式 的过滤格式 这个格式是0-321的任意数字都可以输入...
    99+
    2023-09-12
    qt
  • Linux:正则表达式
    目录 一、grep和元字符         1.1、grep         1.2、元字符 二、正则匹配          2.1、查找特定的字符          2.2、使用[]来查找集合字符         要查找short和shi...
    99+
    2023-09-08
    正则表达式 java shell linux 服务器
  • Python_正则表达式
    正则表达式: 匹配字符串   re.compile():用于编译正则表达式,生成一个正则表达式对象,供 match() 和 search() 两个函数使用,一般建议使用这种编译方式 1 import re 2 str = 'abc1de...
    99+
    2023-01-30
    正则表达式
  • Python3 正则表达式
    1.导入正则表达式模块 import re 2.匹配数字 print(re.findall('[0-9]','qwe21ewq')) 输出结果: 3.匹配字符 print(re.findall('[a-zA-Z]','abC')) 输出...
    99+
    2023-01-30
    正则表达式
  • python 正则表达式
    正则表达式的作用:用来匹配字符串 一、字符串方法 字符串提供的方法是完全匹配,不能进行模糊匹配 s = 'hello world' # 字符串提供的方法是完全匹配,不能进行模糊匹配 print(s.find('ll')) # 2 ...
    99+
    2023-01-30
    正则表达式 python
  • python正则表达式
    笔记:一:简介 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 主要介绍Python中常用的正则表达式处理函数 提高工作效率,完成内置函数无法完成的任务! 搜索常用正则表达式!-...
    99+
    2023-01-30
    正则表达式 python
  • python3-正则表达式
    import re print(re.search("xyx","qxyasdfxuyxyxaqd"))#寻找 print(re.match("xya","qxyasdfxuyxyxaqd"))#从头匹配,失败返回None print(re...
    99+
    2023-01-31
    正则表达式
  • Python正则表达式常用的15个符号整理
    Python正则表达式常用的15个符号整理:    1、 匹配0次或一次前面的分组(问号在正则表达式中可声明非贪心匹配模式,这两种含义是完全无关的)    2...
    99+
    2023-06-02
  • js正则表达式和php正则表达式有什么区别
    本教程操作环境:Windows10系统、javascript1.8.5&&PHP7.1版、Dell G3电脑。js正则表达式和php正则表达式有什么区别总体上,PHP的正则比标准javascript的要强大。PHP有两套正则...
    99+
    2017-12-02
    JavaScript PHP
  • js正则表达式和php正则表达式有哪些区别
    这篇文章主要介绍了js正则表达式和php正则表达式有哪些区别的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇js正则表达式和php正则表达式有哪些区别文章都会有所收获,下面我们一起来看看吧。区别:1、PHP正则表...
    99+
    2023-06-29
  • 在python正则表达式中是怎样正确使用正则表达式
    这篇文章将为大家详细讲解有关在python正则表达式中是怎样正确使用正则表达式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。现在我们已经看了一些简单的正则表达式,那么我们实际在 Python...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作