iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python正则一些简单匹配
  • 561
分享到

python正则一些简单匹配

正则简单python 2023-01-31 02:01:43 561人浏览 泡泡鱼

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

摘要

元字符的使用re.findall(regex,string)功能:在string字符串中,匹配regex正则表达式能够匹配的项,放到一个列表中返回* 普通字符串 元字符 :abc  匹配规则 : 匹配字符串的值匹配示例 :abc In [3


元字符的使用


re.findall(regex,string)

功能:在string字符串中,匹配regex正则表达式能够匹配的项,放到一个列表中返回


* 普通字符串 


元字符 :abc  

匹配规则 : 匹配字符串的值

匹配示例 :abc 


In [3]: re.findall('abc','abcdeabc')

Out[3]: ['abc', 'abc']



* 使用“或”进行多个匹配


元字符: re1 | re2

匹配规则:既能匹配正则表达式re1所表达内容,也能匹配           re2所表达内容

匹配示例:ab | bc  --》  ab   bc

In [5]: re.findall('ab|de','abcdeabc')

Out[5]: ['ab', 'de', 'ab']


* 点号  "."


元字符: .

匹配规则:匹配任意一个字符

匹配示例:f.o   ――》  foo   fao   f@o  

In [6]: re.findall('f.o','foo,f@oabfabo')

Out[6]: ['foo', 'f@o']


* 匹配开头子串


元字符:  ^   

匹配规则:匹配一个字符串的开头位置

匹配示例:^From  匹配以 From 开头的字符串起始部分

In [9]: re.findall('^From','From China')

Out[9]: ['From']


In [10]: re.findall('^From','I come From China')

Out[10]: []


*匹配字符串的结尾


元字符 :  $ 

匹配规则 : 当一个字符串以什么结尾时使用$标记

匹配示例 : py$ -》  匹配所有以py结尾的字符串

In [17]: re.findall('py$','test.py')

Out[17]: ['py']


In [18]: re.findall('py$','python')

Out[18]: []


* 匹配任意0个或多个字符


元字符 :   *

匹配规则: 匹配前面出现的字符或正则表达式0次或者多次

匹配示例: ab* ->   abbbbbbbb

In [23]: re.findall('.*','askjdfh89w4234')

Out[23]: ['askjdfh89w4234', '']


In [24]: re.findall('.*','askjdfh89w4234sdfhhg')

Out[24]: ['askjdfh89w4234sdfhhg', '']


In [25]: re.findall('ab*','a')

Out[25]: ['a']


In [26]: re.findall('ab*','abbbb')

Out[26]: ['abbbb']


*  匹配任意1个或多个字符


元字符 :   +

匹配规则: 匹配前面出现的字符或正则表达式1次或者多次

匹配示例: ab+ ->   abbbbbbbb

In [28]: re.findall('ab+','abbbb')

Out[28]: ['abbbb']


In [29]: re.findall('ab+','a')

Out[29]: []


* 匹配字符 0 次或1次


元字符 :  ? 

匹配规则:匹配前面出现的字符或正则表达式0次或1次

匹配示例: ab? --》 a  或者  ab

In [31]: re.findall('ab?','a')

Out[31]: ['a']


In [32]: re.findall('ab?','ab')

Out[32]: ['ab']


* 匹配前面的字符或re指定次数


元字符 : {N}    N代表一个数字

匹配规则:匹配前面出现的字符或正则表达式N次

匹配示例: ab{3} --》 abbb

In [34]: re.findall('ab{3}','abbbbbb')

Out[34]: ['abbb']


In [35]: re.findall('ab{3}','abb')

Out[35]: []


* 匹配前面的字符或re指定次数


元字符 : {M,N}    M,N代表数字

匹配规则:匹配前面出现的字符或正则表达式M 到 N次

匹配示例: ab{3,8} --》 abbb  abbbbbbbb

In [36]: re.findall('ab{3,8}','abbb')

Out[36]: ['abbb']


In [37]: re.findall('ab{3,8}','abbbbbbbbbbb')

Out[37]: ['abbbbbbbb']


* 字符集合匹配


元字符 : [abcd]

匹配规则: 匹配中括号中任意一个字符

匹配示例: b[abcd]t    ->   bat  bbt  bct  bdt

In [40]: re.findall('b[abc123]t','bat,b1tba3t')

Out[40]: ['bat', 'b1t']


In [41]: re.findall('[ab][cd]','acadbcbd')

Out[41]: ['ac', 'ad', 'bc', 'bd']


* 字符集合匹配


元字符 : [a-zA-Z0-9] [a-z] [0-9] [a-zA-Z] [3-8]

          [b-x]

匹配规则: 匹配中括号中任意一个区间内的字符

匹配示例: [a-zA-Z0-9]+  匹配任意一个由字母数字组 In [43]: re.findall('[a-zA-Z0-9]+','safd1324')

Out[43]: ['safd1324']


In [44]: re.findall('[a-zA-Z0-9]+','adf$&^%123')

Out[44]: ['adf', '123']

                         成的非空字符串


* 字符集合不匹配


元字符 : [^...]   ... 表示上面两项中任意内容

匹配规则: 匹配任意非中括号中的字符集

匹配示例: [^aeiou]  匹配任意一个非aeiou字符 

           [^a-z]  匹配任意一个非小写字母

In [46]: re.findall('[^a-z]','abc1j2^&d')

Out[46]: ['1', '2', '^', '&']


In [47]: re.findall('[^aeiou]','hello world')

Out[47]: ['h', 'l', 'l', ' ', 'w', 'r', 'l', 'd']



* 匹配(非)数字字符


元字符 : \d  [0-9]   \D [^0-9] 

匹配规则 : \d 匹配任意一个数字字符 

           \D 匹配任意一个非数字字符

匹配示例 :\d{3}  -->  '123'

In [49]: re.findall('\d{3}','hello 1234')

Out[49]: ['123']


In [50]: re.findall('\D{3}','hello 1234')

Out[50]: ['hel', 'lo ']


* 匹配(非)字母数字字符


元字符 : \w  [a-zA-Z0-9]   \W   [^a-zA-Z0-9]

匹配规则 : \w 匹配任意一个字母或数字字符 

           \W 匹配任意一个非字母或数字字符

匹配示例 :\w{3}  -->  'a23'

In [51]: re.findall('[A-Z]\w*','Hello World')

Out[51]: ['Hello', 'World']


In [52]: re.findall('\w+-\d+','xiaoming-56')

Out[52]: ['xiaoming-56']


* 匹配(非)空字符


元字符 : \s  (空格 \n  \0  \t  \r)    \S

匹配规则 : \s 匹配任意一个空字符 

           \S 匹配任意一个非空字符

匹配示例 :hello world  -> hello world


In [58]: re.findall('hello\s+world','hello   world')

Out[58]: ['hello   world']


In [60]: re.findall('\S*','helloworld&* ask')

Out[60]: ['helloworld&*', '', 'ask', '']


In [61]: re.findall('\s','a b c\n')

Out[61]: [' ', ' ', '\n']


*匹配字符串开头和结尾 


元字符  \A  (^)  \Z ($)

匹配规则: \A 匹配字符串的开头位置

           \Z 匹配字符串的结尾位置


匹配示例: \Aabc\Z     ^abc$   - > abc


In [70]: re.findall('\Aabc\Z','abcabc')

Out[70]: []

In [66]: re.findall('\Aabc\Z','abc')

Out[66]: ['abc']

In [68]: re.findall('efg\Z','hi,abcdefg')

Out[68]: ['efg']


* 匹配(非)单词边界


元字符 : \b   \B

匹配规则 : 将非字母的部分不认为是单词部分

            将连续字母的部分认为是一个单词

匹配示例: “This is a %test%”


In [74]: re.findall(r'\btest\b','This is a %test%')

Out[74]: ['test']


In [75]: re.findall(r'\bThis\b','This is a %test%')

Out[75]: ['This']


In [76]: re.findall(r'\bis\b','This is a %test%')

Out[76]: ['is']


In [77]: re.findall(r'\Bis\b','This is a %test%')

Out[77]: ['is']


In [78]: re.findall(r'is\b','This is a %test%')

Out[78]: ['is', 'is']

元字符总结


字符 : 匹配实际字符       

匹配单个字符:  .   []   \d  \D  \w \W  \s  \S

匹配重复次数: *   +   ?  {} 

匹配开头结尾: ^  $  \A  \Z   \b  \B

其他 : |    [^ ]


raw字串和转义


r“hello world”   ->  raw字串


raw字串特点 : 不进行转义解析


“hello \n world”    -> \n表示换行 

r"hello \n world"   -> \n表示两个字符


什么时候加r


转为raw字符串是为了防止Python对字符串的转义解析,所以在正则表达式本身有“\”的时候最好加上r


正则表达式的转义匹配

当匹配正则表达式内的特殊字符的时候,正则表达式本身也需要进行转义,如要匹配字符串中的 *  则正则表达式应为“\*”

特殊字符如下:

\   *  .  ?  ()  []  {}  ""  ''


匹配字符串中的*

In [86]: re.findall(r'\*','* is not \\, \\ is not ?')

Out[86]: ['*']


In [87]: re.findall('\\*','* is not \\, \\ is not ?')

Out[87]: ['*']


匹配字符串中的“\”

In [89]: re.findall('\\\\','* is not \\, \\ is not ?')

Out[89]: ['\\', '\\']


In [90]: re.findall(r'\\','* is not \\, \\ is not ?')

Out[90]: ['\\', '\\']



贪婪和非贪婪


贪婪模式 : 不做处理的情况下,正则表达式默认是贪婪模式。即 在使用 *   +  ?  {M,N} 的时候尽可能多的向后进行匹配。

e.g. 

ab*  可以匹配 a   ab  abbb... 那么当b足够多的时候它会尽可能多的去匹配


In [96]: re.findall(r'ab*','abbbbbbb')

Out[96]: ['abbbbbbb']


非贪婪模式:尽可能少的匹配复合正则条件的内容


贪婪模式 ---》 非贪婪模式 方法:后面加“?”

即 *?   +?   ??  {M,N}?


In [100]: re.findall(r'ab*?','abbbbbbb')

Out[100]: ['a']


In [101]: re.findall(r'ab+?','abbbbbbb')

Out[101]: ['ab']


In [102]: re.findall(r'ab??','abbbbbbb')

Out[102]: ['a']


In [103]: re.findall(r'ab{2,4}?','abbbbbbb')

Out[103]: ['abb']


正则表达式分组


((ab)*(cd))

正则表达式 (ab)*cd


1. 正则表达式可以分组,分组的标志即括号(),每个括号都是正则表达式的一个子组,而每个子组是整体正则表达式的一部分,同时也是一个小的正则表达式


2. 当有多个子组的时候,我们从外层向内侧分别叫第一,第二....子组。当同一层次的时候,从左向右分别计数

3. 分组会该表* + ? {}  的重复行为,即把每个分组当做一个整体对待,进行相应的重复操作

4. 当子组能后和多个目标字符串内容进行匹配时,只返回一个内容


In [113]: re.findall(r'(ab)+cd','ababcdef')

Out[113]: ['ab']


5.每个组都可以起名字,我们可以根据起的名字辨别各个组。


格式: (?P<Word>hello)  

给子组(hello) 起一个名字,这个名字是 “word”

子组通过名字进行调用 (?P=word)  表示复制子组正则表达式内容



In [123]: re.findall(r'((?P<word>hello)\s+(?P=word))','hello hello')

Out[123]: [('hello hello', 'hello')]


--结束END--

本文标题: python正则一些简单匹配

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python正则一些简单匹配
    元字符的使用re.findall(regex,string)功能:在string字符串中,匹配regex正则表达式能够匹配的项,放到一个列表中返回* 普通字符串 元字符 :abc  匹配规则 : 匹配字符串的值匹配示例 :abc In [3...
    99+
    2023-01-31
    正则 简单 python
  • python 正则匹配的re.sear
    一个简单的使用re.search 匹配一个字符串中的关键字[root@localhost ~]# vim ceshi.py#!/usr/bin/env python #coding:utf-8 import re err=("stderr:...
    99+
    2023-01-31
    正则 python sear
  • python 正则匹配手机号
    import rephone = str(input('请输入手机号:'))# b = str(12345678912)t = re.compile(r'^1(3\d|4[4-9]|5[0-35-9]|6[67]|7[013-8]|8[0...
    99+
    2023-01-31
    正则 手机号 python
  • [转]python 正则匹配中文
     python 正则匹配中文    由于 需求原因,需要匹配 提取中文,大量google下,并没有我需要的。花了一个小时大概测试,此utf8中文通过,特留文。    参考: http://hi.baidu.com/nivrrex/...
    99+
    2023-01-31
    正则 中文 python
  • 正则表达式如何匹配单词
    这篇文章给大家分享的是有关正则表达式如何匹配单词的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。正则表达式匹配单词的内幕:元字符<<\b>>也是一种对位置进行匹配的“锚”。这种匹配是0长度匹...
    99+
    2023-06-17
  • 正则表达式的匹配规则有哪些
    正则表达式的匹配规则有以下几种:1. 字符匹配:使用普通字符来匹配输入的相应字符。2. 通配符匹配:使用特殊字符来匹配任意一个字符。...
    99+
    2023-09-26
    正则表达式
  • 怎么用java正则表达式匹配单词
    使用Java正则表达式匹配单词,可以按照以下步骤进行:1. 创建一个正则表达式模式,用于匹配单词。例如,可以使用 \b\w+\b 来...
    99+
    2023-10-18
    java
  • Java 正则表达式匹配
    1 正则表达式 1.1 什么是正则表达式 正则表达式: 定义一个搜索模式的字符串。 正则表达式可以用于搜索、编辑和操作文本。 正则对文本的分析或修改过程为:首先正则表达式应用的是文本字符串(text/string),它会以定义的模式从左到右...
    99+
    2023-10-27
    正则表达式 java 开发语言
  • python 包之 re 正则匹配教程分享
    目录一、开头匹配二、全匹配三、部分匹配四、匹配替换五、匹配替换返回数量六、分割字符串七、匹配所有八、迭代器匹配九、编译对象十、修饰符一、开头匹配 从字符串开头开始匹配返回匹配对象;如...
    99+
    2024-04-02
  • Golang 正则匹配效率详解
    最近有个小需求,校验IMEI是否为15位纯数字(是否合法) 以下是正则匹配 与自己实现的简单验证方式进行压测 package main import ( "regexp"...
    99+
    2024-04-02
  • Python中使用正则表达式及正则表达式匹配规则详解
    目录1 导库2 使用模板3 说明4 示例5 正则表达式匹配规则1 导库 import re 2 使用模板 re_pattern = re.compile(pattern, flags...
    99+
    2023-03-22
    Python正则表达式匹配规则 Python正则表达式
  • 正则表达式将单词与边界精确匹配
    php小编子墨在这里为大家介绍一种强大的文本匹配工具——正则表达式。正则表达式可以用来精确匹配单词与边界,使我们能够更准确地找到所需的内容。无论是在文本处理、数据提取还是表单验证等场景...
    99+
    2024-02-12
  • 一个关于JS正则匹配的踩坑记录
    最近发现在JS里的正则匹配有一个坑,而且当时很莫名奇妙,一度让我怀疑出现了灵异事件。 下面是踩坑代码 var str=["二七1","二七2","金水","二七3","二七...
    99+
    2024-04-02
  • python中的正则表达式,贪婪匹配与非贪婪匹配方式
    目录正则表达式,贪婪匹配与非贪婪匹配正则表达式前戏. ^ $* + { }字符集[][^]分组 ()与 或 |[^]转义符 \贪婪匹配re模块下的常用方法总结正则表达式,贪婪匹配与...
    99+
    2023-01-31
    python正则表达式 python贪婪匹配 python非贪婪匹配
  • C++中使用正则匹配问题
    目录C/C++可以用正则表达式吗?若要判断一个输入的QQ号是否有效,如何判断?正则程序库(regex)正则文法(regex syntaxes)匹配(Match)搜索(Search)替...
    99+
    2022-11-13
    C++正则匹配 使用正则匹配 C++正则
  • Java匹配正则表达式汇总
    目录一.我们先举个例子来看看Java匹配正则表达式二.匹配表达式的特殊情况java匹配字符串表达式在我们数据处理方面是及其重要的,现在就把我这几天数据处理比较常用的向大家介绍一下,常...
    99+
    2023-03-24
    Java匹配正则表达式 java正则匹配
  • jQuery中常用正则匹配表达式有哪些
    这篇文章主要介绍了jQuery中常用正则匹配表达式有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。jQuery常用正则匹配表达式//整数...
    99+
    2024-04-02
  • 如何用 Golang 正则匹配多个单词或字符串?
    golang 正则表达式使用管道符 | 来匹配多个单词或字符串,将各个选项作为逻辑 or 表达式分隔开来。例如:匹配 "fox" 或 "dog":fox|dog匹配 "quick"、"b...
    99+
    2024-05-14
    golang 正则 python
  • 怎么使用python正则表达式匹配空格
    使用正则表达式匹配空格的方法是使用`\s`表示空白字符。下面是一个示例代码:```pythonimport re# 匹配所有空白字符pattern = r'\s'text = 'Hello World!'result = re.find...
    99+
    2023-08-11
    python
  • Python正则表达式以及常用匹配实例
    目录1 正则表达式对象2 正则表达式修饰符 - 可选标志3 正则表达式字符意义re.match函数re.search方法替换re.subre.compile 函数findallre....
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作