当前位置: 首页 > article >正文

正则表达式(Regular Exprerssion)in Python

        之前帮一位朋友面大模型微调实习岗位的时候,人家面试官考到了正则表达式,感觉这块知识还是挺重要的,所以浅浅的学习一下,每个小部分的代码在后面

目录

0.先从一个案例入手(提取文本中的电子邮件地址)

      代码实现:

1.为什么正则表达式?

        2.基本语法

普通字符:

元字符:

字符类:

预定义字符类:

重复限定符:

分组和捕获:

特殊字符:

代码实现:


参考学习一个国外博主的链接:

参考

0.先从一个案例入手(提取文本中的电子邮件地址)

      代码实现:

        

import re

# 示例文本
text = """
Contact us at support@example.com for any inquiries.
You can also reach out to sales@company.com for business opportunities.
"""

# 正则表达式模式
pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'

# 使用正则表达式查找所有匹配项
matches = re.findall(pattern, text)

# 打印匹配的电子邮件地址
for match in matches:
    print(match)

在这个例子中,正则表达式的模式解释如下:

  • \b\b:表示单词的边界,确保我们匹配整个电子邮件地址而不是它的一部分。
  • [A-Za-z0-9._%+-]+:匹配电子邮件地址的用户名部分,包括字母、数字以及一些特殊字符。
  • @:匹配电子邮件地址中的 "@" 符号。
  • [A-Za-z0-9.-]+:匹配邮件服务器的域名部分,包括字母、数字以及一些特殊字符。
  • \.:匹配邮件服务器域名和顶级域之间的点号。
  • [A-Z|a-z]{2,}:匹配顶级域,至少包括两个字母。

1.为什么正则表达式?

                处理文本任务的时候,要能过滤出同种格式的信息,让同一块代码做相同的事情,use regular expressions to find and retrieve patterns in text 其实就是模式的概念,匹配或者查找字符串中的模式。

        2.基本语法

  1. 普通字符:

    • 普通字符表示它们自身,例如字母、数字和大多数标点符号。
  2. 元字符:

    • .:匹配除换行符之外的任意字符。
    • ^:匹配字符串的开始。
    • $:匹配字符串的结束。
    • *:匹配前面的字符零次或多次。
    • +:匹配前面的字符一次或多次。
    • ?:匹配前面的字符零次或一次。
    • \:转义字符,用于匹配元字符本身。
  3. 字符类:

    • [...]:字符类,匹配方括号中的任意字符。
    • [^...]:否定字符类,匹配不在方括号中的任意字符。
  4. 预定义字符类:

    • \d:匹配任意数字,相当于 [0-9]
    • \D:匹配任意非数字。
    • \w:匹配任意字母、数字、下划线,相当于 [a-zA-Z0-9_]
    • \W:匹配任意非字母、数字、下划线。
    • \s:匹配任意空白字符,包括空格、制表符、换行符。
    • \S:匹配任意非空白字符。
  5. 重复限定符:

    • {n}:匹配前面的字符恰好 n 次。
    • {n,}:匹配前面的字符至少 n 次。
    • {n,m}:匹配前面的字符至少 n 次,但不超过 m 次。
  6. 分组和捕获:

    • ():将其中的表达式分组,并创建捕获组。
  7. 特殊字符:

    • \b:匹配单词的边界。
    • \B:匹配非单词边界。

代码实现:

1.普通字符:

普通字符表示它们自身,不需要特殊符号。

import re

text = "This is a simple example."

# 匹配 "simple"
pattern = re.compile(r'simple')
result = pattern.search(text)
print(result.group())

输出:simple

2.元字符:

  • .:匹配除换行符之外的任意字符。
import re

text = "abc123"

# 匹配任意字符后跟数字
pattern = re.compile(r'.\d')
result = pattern.search(text)
print(result.group())

·^:匹配字符串的开始。

import re

text = "start with this"

# 匹配以 "start" 开始的字符串
pattern = re.compile(r'^start')
result = pattern.search(text)
print(result.group())

·$:匹配字符串的结束。

import re

text = "end with this"

# 匹配以 "this" 结束的字符串
pattern = re.compile(r'this$')
result = pattern.search(text)
print(result.group())

 *:匹配前面的字符零次或多次

import re

text = "ab"

# 匹配 "a" 后跟零次或多次的 "b"
pattern = re.compile(r'ab*')
result = pattern.match(text)
print(result.group())

+:匹配前面的字符一次或多次。

import re

text = "ab"

# 匹配 "a" 后跟一次或多次的 "b"
pattern = re.compile(r'ab+')
result = pattern.match(text)
print(result.group())

 ?:匹配前面的字符零次或一次。

import re

text1 = "ab"
text2 = "abb"

# 匹配 "a" 后跟零次或一次的 "b"
pattern = re.compile(r'ab?')
result1 = pattern.match(text1)
result2 = pattern.match(text2)
print(result1.group(), result2.group())

\:转义字符,用于匹配元字符本身。

import re

text = "The cost is $10."

# 匹配 "$" 符号
pattern = re.compile(r'\$')
result = pattern.search(text)
print(result.group())

字符类:

  • [...]:字符类,匹配方括号中的任意字符。
  • [^...]:否定字符类,匹配不在方括号中的任意字符。
import re

text = "The cat and the hat."

# 匹配 "cat" 或 "hat"
pattern = re.compile(r'[ch]at')
result = pattern.search(text)
print(result.group())

# 匹配不含 "c" 或 "h" 的字符
pattern = re.compile(r'[^ch]')
result = pattern.findall(text)
print(result)

预定义字符类:

  • \d:匹配任意数字,相当于 [0-9]
  • \D:匹配任意非数字。
  • \w:匹配任意字母、数字、下划线,相当于 [a-zA-Z0-9_]
  • \W:匹配任意非字母、数字、下划线。
  • \s:匹配任意空白字符,包括空格、制表符、换行符。
  • \S:匹配任意非空白字符。
import re

text = "The price is $20."

# 匹配数字
pattern = re.compile(r'\d+')
result = pattern.search(text)
print(result.group())

# 匹配非数字
pattern = re.compile(r'\D+')
result = pattern.search(text)
print(result.group())


text2 = "user_name123"

# 匹配字母、数字、下划线
pattern2 = re.compile(r'\w+')
result2 = pattern2.match(text2)
print(result2.group())



text = "Special characters: #@!"

# 匹配非字母、数字、下划线
pattern = re.compile(r'\W+')
result = pattern.match(text)
print(result.group())
text = "This is a text with spaces."

# 匹配空白字符
pattern = re.compile(r'\s+')
result = pattern.split(text)
print(result)

# 匹配非空白字符
pattern = re.compile(r'\S+')
result = pattern.findall(text)
print(result)

       

重复限定符:

  • {n}:匹配前面的字符恰好 n 次。
  • text = "xxy"
    
    # 匹配 "x" 重复两次
    pattern = re.compile(r'x{2}')
    result = pattern.search(text)
    print(result.group())
    
  • {n,}:匹配前面的字符至少 n 次。
text = "xxxy"

# 匹配 "x" 至少两次
pattern = re.compile(r'x{2,}')
result = pattern.search(text)
print(result.group())
  • {n,m}:匹配前面的字符至少 n 次,但不超过 m 次。
text = "xxxy"

# 匹配 "x" 至少两次,但不超过三次
pattern = re.compile(r'x{2,3}')
result = pattern.search(text)
print(result.group())

                


http://www.kler.cn/a/152663.html

相关文章:

  • 2023全球数字贸易大赛-web3,区块链,诺威信,浪潮云,微众区块链,福建中科星泰,瓴羊区块链,联想-元宇宙,硅基智能-
  • 单元测试与白盒测试的区别
  • 【Linux】TCP套接字编程
  • Zookeeper(一)在WSL单机搭建Zookeeper伪集群
  • 【Rust】常见集合
  • 网络安全技术
  • 用于缓存一些固定名称的小组件
  • npm pnpm yarn(包管理器)的安装及镜像切换
  • Git .gitignore 忽略文件不生效解决方法
  • 计算机新建盘符和重新分配盘符的大小
  • 【独家OD2023C卷真题】20天拿下华为OD笔试【二分查找】2023C-小明找位置【欧弟算法】全网注释最详细分类最全的华为OD真题题解
  • xcode swiftui项目添加依赖
  • JavaScript 原型,原型链的特点
  • 【JavaEE初阶】线程安全问题及解决方法
  • 【Qt绘图】之绘制坦克
  • Kafka(五)消费者回调 +定时重试 + 理解Rebalance
  • 2023认证杯小美赛数学建模国际赛ABCD题思路及python代码分享
  • 初识Linux:权限
  • Edge 旧版本回退
  • 第一百八十五回 如何禁止页面跟随手机自动旋转