正则表达式用来干嘛

  • 正则表达式是用来匹配文本的一种语言。别被语言吓到,正则表达式其实非常简单,可能你花2个小时就能用起来,但是你一定会觉得非常强大,像非常厉害的数据爬取,网页爬虫,都要用到正则表达式!

什么是正则表达式

维基百科解释:

正则表达式(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),又称正规表示式、正规表示法、正规运算式、规则运算式、常规表示法,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在 Perl 中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由 Unix 中的工具软件(例如 sed 和 grep)普及开的。

b81fa4c4d0fa6e4e78cf574afdfb9809.png
表格1

单位划分

  • 正则表达式由操作符和原子构成(操作元),也就是操作符,和操作的对象!先上个例子1:
import re
txt1 = 'WWe111 Are22 Family3 !'
reg = "[A-Z]+[a-z]{2}[0-9]*?"
parttern = re.compile(reg)
content = re.findall(parttern,txt1)
print(content)

#output:['Are', 'Fam']

操作原子

本意原子

  • 例1中[A-Z]的意思是匹配大写字母,且只匹配一个大写字母!如例2:
import re
txt1 = 'We111 Are22 Family3!'
reg = "[A-Z]"
parttern = re.compile(reg)
content = re.findall(parttern,txt1)
print(content)

#output:['W', 'A', 'F']
  • 而[a-z]只匹配一个小写字母。如例3:
import re
txt1 = 'We111 Are22 Family3!'
reg = "[a-z]"
parttern = re.compile(reg)
content = re.findall(parttern,txt1)
print(content)

#output:['e', 'r', 'e', 'a', 'm', 'i', 'l', 'y']
  • +加号表示匹配1个或者多个前面的操作元,默认情况是匹配尽可能多的字符,什么意思呢?如例4
import re
txt1 = 'WWe111 Are22 Family3 !'
reg = "[A-Z]+"
parttern = re.compile(reg)
content = re.findall(parttern,txt1)
print(content)

#output:['WW', 'A', 'F']
  • 例4中结果匹配了两个WW,但是加一个问号?就表示尽可能少的匹配,也就是非贪婪模式。如例5:
import re
txt1 = 'WWe111 Are22 Family3 !'
reg = "[A-Z]+?"
parttern = re.compile(reg)
content = re.findall(parttern,txt1)
print(content)

#output:['W', 'W', 'A', 'F']
  • *星号的意思是匹配0个或者多个,同样有贪婪模式和非贪婪模式。例子1中*星号后面有个问号?表示非贪婪模式,匹配数字0个数字,一般情况下就是不匹配数字的意思
  • 注意正则匹配是拿整个表达式去匹配文本,得到的加入到列表中,然后从匹配到的字符下一个字符开始重新匹配,如此循环直到结束!
  • 例1中A-Z,a-z,0-9是正则表达式的本意原子,表示的就是本身,没有其他意思
  • 而加号+星号*?减号-等并不是表示表面上的的意思,如+加号并不是字符串拼接或者两个数字相加,同样的-减号并不是两个数字相减,[0-9]表示的是匹配0-9中的任意一个整数.
  • 例1中的*号是数量操作符,表示匹配0个或者多个前面一个原子,类似的操作符还有+,?,*, {n, m}对照表格1.
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐