之前帮一位朋友面大模型微调实习岗位的时候,人家面试官考到了正则表达式,感觉这块知识还是挺重要的,所以浅浅的学习一下,每个小部分的代码在后面
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.普通字符:
import re
text = "This is a simple example."
# 匹配 "simple"
pattern = re.compile(r'simple')
result = pattern.search(text)
print(result.group())
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())
原文地址:https://blog.csdn.net/m0_61762695/article/details/134697856
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_18269.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。