文本操作基础知识:正则表达式

目录

摘要:

一、语法

二、匹配模式pattern

[1、普通字符 ](#1、普通字符[ ])

2、限定字符

3、定位字符

[4、运算字符( )](#4、运算字符( ))

三、修饰符flags

四、各语言的正则使用

1、Python的re

参考资料:


摘要:

常用匹配:A-C\^A-C、\w、\d、\n、\r、\t、*、+、?、{n,m}。

python的re.findall函数

一、语法

/pattern/flags

pattern:表示匹配模式,需要匹配的具体内容。

**flags:**表示修饰符。

二、匹配模式pattern

1、普通字符

匹配多个字符条件要用\[\],单个字符无需使用中括号括起来。例:/A/g和/AB/g。二者的区别在于前者只匹配单个字符A,而后者匹配单个字符A或B。

符合 解释
ABC 匹配单个字符
A-C 匹配A-C单个字符
\^ABC 匹配除了ABC外的单个字符
\S 匹配非空字符,不包括回车换行
\s 匹配空字符,包括回车换行
\w 匹配字母、、数字、下划线等同于 A-Za-z0-9_
\d 匹配单个数字等同于0-9
\t 匹配一个制表符
\v 匹配一个垂直制表符

2、限定字符

普通字符只能匹配单个,限定字符可以匹配多个连起来的,主要用于匹配字符串。

符号 解释
. 匹配除了换行符外的单个字符等同于\^\\n\\r
* 匹配子表达式子零次或多次,例:O*
+ 匹配子表达式一次或多次,例:O+
? 匹配子表达式零次或一次,例:O?
\ 转义字符,用于匹配特殊字符。
| 表示或
{n} 匹配固定n个字符,例:O{2}匹配food。
{n,} 至少匹配n次。
{n,m} 至少匹配n次,至多匹配m次。

3、定位字符

^匹配字符段落的开头,$匹配段落的结尾。

符号 解释
^ 匹配字符串开头
$ 匹配字符串结尾
\b 匹配单词边界
\B 匹配非单词边界

案例:匹配字符串开头

字符段开头会有一个非可见的字符,匹配的是这个,^he则是匹配he开头的字符段(这种状态要加上多行模式。

4、运算字符( )

了解即可,以下做个简单的介绍.。

字符 解释
(?=pattern) 匹配 pattern 但不获取匹配结果(不包括匹配模式字符)。
(?:pattern) 匹配 pattern 但获取匹配结果(包括匹配模式字符)
(?!pattern) 匹配不在pattern内的字符(不包括匹配模式字符)。
(?<=pattern) 与(?=pattern)类似,只不过(?=pattern)只能放在查询字符串末尾,(?<=pattern)只能放在查询字符串开头。
(?<!pattern) 与(?!pattern)类似,只不过(?!pattern)只能放在查询字符串末尾,(?<!pattern)只能放在查询字符串开头。

测试:?: 和 ?=

前者进行了结果获取。

后者只是匹配,并没有获取结果。

三、修饰符flags

常用的修饰符为//i和//g,可以混合搭配使用。

案例:全局忽略大小写匹配ABC字符串

bash 复制代码
/ABC/gi

四、各语言的正则使用

1、Python的re

要引入re库:import re

python 复制代码
import re

Python的re库,无需按照正则表达式的语法,也就是两个双斜杠,修饰符模块由于python自定,这里举例常用的两个函数一个是全局搜索re.findall和全局替换re.sub。

python正则修饰符模块

**re模块中flags的常用属性:
标志位,用于控制正则表达式的匹配方式。

  • re.I:忽略大小写
  • re.L:表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
  • re.M:多行模式
  • re.S:即为 . ,并且包括换行符在内的任意字符(.不包括换行符)
  • re.U:表示特殊字符集 \w, \W, \b, \B, \s, \S, \d, \D 依赖于 Unicode 字符属性数据库
  • re.X:为了增加可读性,忽略空格和 # 后面的注释**

案例:re.findall全局搜索返回list

**findall:查找整个字符串,返回一个list

  • 语法:re.findall(pattern, string, flags=0)
  • 解释:pattern:表示模式字符串,由要匹配的正则表达式转换而来。
    string:表示要匹配的字符串。
    flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写**
python 复制代码
import re
str="Sunlan love apple lSunlan" 
c=re.findall("[A-Z]",str,re.I)
print(c)

案例:re.sub全局替换返回

**sub:查找字符串中所有匹配的数据进行替换

  • 语法:re.sub(pattern, repl, string,count=0,flags=0)
  • 解释:pattern:表示模式字符串,由要匹配的正则表达式转换而来。
    repl:表示替换的字符串。
    string:表示要匹配的字符串。
    count:可选参数,表示模式匹配后替换的最大次数,默认值为0,表示替换所有的匹配值。
    flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。**
python 复制代码
import re
str="Sunlan love apple lSunlan" 
str=re.sub(" lSunlan","s",str)
print(str)

参考资料:

正则表达式 -- 简介 | 菜鸟教程

正则表达式在线测试 | 菜鸟工具

相关推荐
吴声子夜歌2 天前
正则指引——Ruby
开发语言·正则表达式·ruby
吴声子夜歌2 天前
正则指引——Golang
开发语言·golang·正则表达式
吴声子夜歌3 天前
正则指引——PHP
开发语言·正则表达式·php
吴声子夜歌5 天前
正则指引——断言
正则表达式
吴声子夜歌5 天前
正则指引——匹配原理
java·正则表达式
吴声子夜歌6 天前
正则表达式——环视
开发语言·正则表达式
吴声子夜歌7 天前
正则表达式——边界
正则表达式
营养充电站7 天前
C++23 新特性在 CLion 中的实战体验
macos·docker·jupyter·正则表达式
吴声子夜歌7 天前
正则表达式——字符组
正则表达式