正则表达式详解(零基础教学,手把手教你写正则)

本篇文章将从零讲解什么是正则表达式,以及正则表达式的规则、在python中的应用,用通俗易懂的描述方式进行零基础级别的讲解,尽量做到全网最全讲解,力求最高质量文章,欢迎关注!点击目录可直接进行相关位置跳转。

目录:

什么是正则?

为什么需要正则?

元字符 

1、将正则表达式写成"."来运行程序

2、将正则表达式写成"^."来运行程序

3、将正则表达式写成".$"来运行程序

字符集

 例1:提取一串字符串中包含a、b、c、d、e的部分

 例2:提取一串字符串中除了a、b、c、d、e的部分

量词

例1:字符串"ab*c"表示b可以出现0次或多次,所以下列情况均可以匹配到

例2:字符串"ab+c"表示b可以出现1次或多次,所以下列情况均可以匹配到

转义及特殊序列

例1:匹配所有的数字

例2:匹配所有非数字

例3: 匹配所有非字母、数字、下划线

例4:根据边界匹配,找出所有的foo

正则分组

例:使用分组分别提取邮箱中的前后两部分


什么是正则?

正则是一种用于描述文本模式的工具。

正则表达式使用一些特定的符号和字符来描述文本中的模式和结构,例如字符串的格式、字符集合、数量和位置等。

使用正则表达式可以有效地进行字符串匹配、替换和提取等操作。

有了正则表达式,我们就可以非常快速的提取出想要的内容而不需要特别复杂的代码来完成

例如:正则表达式可以实现用很少量的字符即可提取出下列文字中所有的数字部分↓

截至收盘,上证指数涨0.78%,报3446.73点,深证成指涨0.91%,报13642.95点,创业板指涨1.06%,报2672.12点......

为什么需要正则?

正则表达式常用于文本处理、搜索引擎、数据清洗和数据挖掘等领域。

在编程语言中,例如Python、Java、JavaScript等,都提供了正则表达式的支持。通过编写正则表达式,我们可以轻松地匹配和操作字符串中的特定模式,从而快速实现复杂的字符串处理任务。

总之,正则表达式是一种非常有用的工具,可以帮助我们快速有效地处理和操作字符串数据,提高数据处理的效率和准确性。

正则表达式样例:

pattern = r"\d+(\.\d+)?"

在python中运行正则表达式方法:

import re
text = "截至收盘,上证指数涨0.78%,报3446.73点,深证成指涨0.91%,报13642.95点,创业板指涨1.06%,报2672.12点......"

#使用正则表达式提取数字
pattern = r"\d+(\.\d+)?"
result = re.findall(pattern,text)

#输出提取数据
print(result)

写好一个核心的正则表达式,主要先从理解它的基本组成部分开始,主要包括理解且会用以下内容:

  • 元字符
  • 字符集
  • 量词
  • 转义
  • 特殊序列
  • 分组 

元字符 

元字符:元字符是正则表达式中用来匹配字符的特殊字符

以下三种为常用元字符:

  • "."表示匹配任意字符
  • "^"表示匹配字符串的开头
  • "$"表示匹配字符串的结尾

 1、将正则表达式写成"."来运行程序,过程如下

import re

text = "截至收盘,上证指数涨0.78%,报3446.73点,深证成指涨0.91%,报13642.95点,创业板指涨1.06%,报2672.12点......"

# 将正则表达式换成一个小数点
pattern = r"."
result = re.findall(pattern, text)

# 输出提取数据
print(result)

在pycharm编辑器中的运行结果:

['截', '至', '收', '盘', ',', '上', '证', '指', '数', '涨', '0', '.', '7', '8', '%', ',', '报', '3', '4', '4', '6', '.', '7', '3', '点', ',', '深', '证', '成', '指', '涨', '0', '.', '9', '1', '%', ',', '报', '1', '3', '6', '4', '2', '.', '9', '5', '点', ',', '创', '业', '板', '指', '涨', '1', '.', '0', '6', '%', ',', '报', '2', '6', '7', '2', '.', '1', '2', '点', '.', '.', '.', '.', '.', '.']

以上方法则实现了把没一个字符都提取出来了并且放在了一个列表中。

2、将正则表达式写成"^."来运行程序,过程如下

import re

text = "截至收盘,上证指数涨0.78%,报3446.73点,深证成指涨0.91%,报13642.95点,创业板指涨1.06%,报2672.12点......"

# 将正则表达式换成"^."
pattern = r"^."
result = re.findall(pattern, text)

# 输出提取数据
print(result)

在pycharm编辑器中的运行结果:

['截']

以上方法提取出了这段文本中的第一个字符,因为"^"符号表示的是开头,如果把"^"放在"."后面,则会造成数据查找不到,错误示例:

#错误示例
import re

text = "截至收盘,上证指数涨0.78%,报3446.73点,深证成指涨0.91%,报13642.95点,创业板指涨1.06%,报2672.12点......"

# 将正则表达式换成".^"
pattern = r".^"
result = re.findall(pattern, text)

# 输出提取数据
print(result)

在pycharm编辑器中的运行结果:

[]

3、将正则表达式写成".$"来运行程序,过程如下

import re

text = "截至收盘,上证指数涨0.78%,报3446.73点,深证成指涨0.91%,报13642.95点,创业板指涨1.06%,报2672.12点......"

# 将正则表达式换成".$"
pattern = r".$"
result = re.findall(pattern, text)

# 输出提取数据
print(result)

在pycharm编辑器中的运行结果:

['.']

以上方法提取出了字符串中的最后一个字符,因为"$"表示匹配字符串的结尾,所以必须放在整个正则表达式的结尾,如果放在了前面,如"$."就会造成和".^"的结果,完全提取不出数据。


字符集

在python的re模块中,字符集用于指定匹配的字符范围。

普通字符:可以在字符集中使用普通的ASCII字符,例如字符集[a-z]表示匹配所有的小写字母。

范围:字符集中可以使用“-”来指定自付范围。如字符集[a-z]表示匹配所有小写字母。

排除字符:字符集中可以使用"^"符号来排除一些字符,例如[^a-z]表示匹配所有不是小写字母的字符。

例1:提取一串字符串中包含a、b、c、d、e的部分,过程如下

import re

text = "book great advertise cat"

# 将正则表达式换成".$"
pattern = r"[a-d]"
result = re.findall(pattern, text)

# 输出提取数据
print(result)

在pycharm编辑器中的运行结果:

['b', 'a', 'a', 'd', 'c', 'a']

 例2:提取一串字符串中除了a、b、c、d、e的部分,过程如下

import re

text = "book great advertise cat"

# 将正则表达式换成".$"
pattern = r"[^a-d]"
result = re.findall(pattern, text)

# 输出提取数据
print(result)

在pycharm编辑器中的运行结果:

['o', 'o', 'k', ' ', 'g', 'r', 'e', 't', ' ', 'v', 'e', 'r', 't', 'i', 's', 'e', ' ', 't']

量词

在python正则表达式中,量词用于指定匹配的次数,可以用在字符、字符集、分组等正则表达式元素上。常见的量词包括:

  • *:匹配前一个字符0次或多次,等价于{0,}
  • +:匹配前一个字符1次或多次,等价于{1,}
  • ?:匹配前一个字符0次或1次,等价于{0,1}
  • {m}:匹配前一个字符恰好m次
  • {m,n}:匹配前一个字符至少m次,最多n次

例1:字符串"ab*c"表示b可以出现0次或多次,所以下列情况均可以匹配到

  • "ac"
  • "abc"
  • "abbc"
  • "abbbbc"

例2:字符串"ab+c"表示b可以出现1次或多次,所以下列情况均可以匹配到

  • "abc"
  • "abbc"
  • "abbbbc"

转义及特殊序列

正则表达式中,特殊序列是一些具有特殊意义的转义序列,他们以反斜杠"\"为前缀,常见的特殊序列有:

  • \d:匹配任意一个数字字符,当当与[0-9]
  • \D:匹配任意一个非数字字符,相当于[^0-9]
  • \w:匹配任意一个字母、数字或下划线字符,相当于[a-zA-Z0-9]
  • \W:匹配任意一个非字母、数字或下划线字符,相当于[^a-zA-Z0-9]
  • \s:匹配任意一个空白字符,包括空格、制表符和换行符
  • \S:匹配任意一个非空白字符,不包括空格、制表符和换行符
  • \b:匹配单词边界,包括单词前面或后面的空格、标点符号或字符串边界
  • \B:匹配非单词边界,不包括单词前面或后面的空格、标点符号或字符串边界
  • \A:匹配字符串开头
  • \Z:匹配字符串结尾

例1:匹配所有的数字,过程如下

import re

text = "abcde12345fghijk"


pattern = r"\d"
result = re.findall(pattern, text)

# 输出提取数据
print(result)

在pycharm编辑器中的运行结果:

['1', '2', '3', '4', '5']

例2:匹配所有非数字,过程如下

import re

text = "abcde12345fghijk"


pattern = r"\D"
result = re.findall(pattern, text)

# 输出提取数据
print(result)

在pycharm编辑器中的运行结果:

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']

 例3: 匹配所有非字母、数字、下划线,过程如下

import re

text = "abcde12345??#fghijk"


pattern = r"\W"
result = re.findall(pattern, text)

# 输出提取数据
print(result)

在pycharm编辑器中的运行结果:

['?', '?', '#']

例4:根据边界匹配,找出所有的foo,过程如下

import re

text = "abcde12 foo 345 foowf   foo??#fghijk"


pattern = r"\bfoo\b"
result = re.findall(pattern, text)

# 输出提取数据
print(result)

在pycharm编辑器中的运行结果:

['foo', 'foo']

正则分组

正则表达式中的分组指的是将正则表达式中的某个部分括号起来,以便于对这个部分进行操作或提取。

在python的re模块中,可以使用圆括号()来分组。

例:使用分组分别提取邮箱中的前后两部分,过程如下

import re

text = "[email protected]"


pattern = r"(\w+)@(\w+)\.com"
result = re.search(pattern, text)


# 输出提取数据
print(result.group(1))
print(result.group(2))

在pycharm编辑器中的运行结果:

ceshiyouxiang
163

在这个例子中,正则表达式r"(\w+)@(\w+)\.com"中的两个组分别是(\w+)和(\w+)。

第一个分组匹配一个或多个字母、数字或下划线,并将其作为第一个组的内容;第二个分组匹配一个或多个字母、数字或下划线,并将其作为第二个组的内容。

匹配成功后,可以通过match.group(1)和match.group(2)来获取这两个分组的内容。


以上就是正则表达式所有的组成部分了,只要把每一部分都掌握好,组合起来应用,就可以写出完美的正则表达式了,如有疑问欢迎评论区留言讨论或私信,同时如果觉得本文不错,辛苦点赞+关注,分享给身边更多的朋友~

关注我,不迷路

******我的本文相关专栏******

软件测试 & 开发(单击此处进入)


 ******我的其它作品专栏******

PC常见故障汇总专栏(点击进入)

EXCEL综合场景应用详解(点击此处进入)

全国计算机等级考试-二级python基础(点击此处进入)

猜你喜欢

转载自blog.csdn.net/Liu_GuoXing/article/details/129818333