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

目录

摘要:

一、语法

二、匹配模式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)

参考资料:

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

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

相关推荐
阿华的代码王国1 小时前
【从0做项目】Java搜索引擎(6)& 正则表达式鲨疯了&优化正文解析
java·后端·搜索引擎·正则表达式·java项目·从0到1做项目
程序员小王꧔ꦿ13 小时前
BeautifulSoup、lxml/XPath和正则表达式在数据爬取中的核心差异及适用场景
正则表达式·beautifulsoup
程序员小王꧔ꦿ13 小时前
BeautifulSoup、lxml/XPath和正则表达式在数据爬取中的适用场景
正则表达式·beautifulsoup
NGC22379992 天前
JavaAPI(字符串 正则表达式)
正则表达式
Dontla3 天前
正则化(Regularization)和正则表达式(Regular Expression)区别
正则表达式
索然无味io3 天前
Python--正则表达式
开发语言·windows·python·安全·web安全·网络安全·正则表达式
Sun_Weiss3 天前
从字符串中匹配多个关键词,优先匹配更长的关键词
python·正则表达式·字符串
哒啵Q2975 天前
对正则表达式说不!!!
正则表达式
玖龍的意志6 天前
正则表达式(Regular expresssion)
python·正则表达式