show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次我们接触了
- 新的字符串模式匹配方式
- re(regular expression)
- 正则表达式
- 这里面的各种特殊字符到底应该如何理解呢?
- Matches any character except a new line
- 可以指代任何字符
- 除了回车符
import re
s = "oeasy"
pattern = r"..."
flag = re.search(pattern, s)
print(flag)
- r"..."
- 代表三个字符(不能有换行)
- 匹配 到 oea
- 返回了
- 起止位置
- 具体实例
- 真的无法匹配回车符吗?
import re
s = "oe\na\nsy"
pattern = r"..."
matches = re.search(pattern, s)
print(matches)
- 结果
- 帮助原文
- 搜索字符串查找匹配
- 返回一个复合匹配的对象实例
- 可以返回多个对象实例吗?
- 返回一个列表
- 列表中 是 不覆盖的 匹配模式
- 这确实是个列表
- 但是如何理解 不覆盖?
- 将匹配模式设置为
- r".."
- 代表2个字符(不能有换行)
- 匹配 到 ['oe','as']
import re
s = "oeasy"
pattern = r".."
flag = re.search(pattern, s)
print(flag)
- 运行结果
- 结果之间不覆盖
- non-overlapping
- 如果就想要覆盖呢?
import re
s = "oeasy"
pattern = r"..."
matches = re.finditer(pattern, s)
for match in matches:
print("Matched substring:", match.group(0))
- 看起来还是会消耗原字符串
- 如何不消耗原字符串呢?
- 尝试替换模式
import re
s = "oeasy"
pattern = r"(?=(...))"
matches = re.findall(pattern, s)
for match in matches:
print("匹配到的字符:", match)
- 结果
- 确实实现了 不消耗的效果
- .
- 匹配 任意非换行字符
- ^
- 只匹配 字符串开始处的 子串
import re
s = "Hello,oeasy!Hello, World!"
pattern = r"^Hello"
matches = re.findall(pattern, s)
print(matches)
- 只能查到一个
- 回车算新的开始吗?
import re
s = "Hello,oeasy!\nHello, World!"
pattern = r"^Hello"
matches = re.findall(pattern, s)
print(matches)
- 回车不算新的开始
- 不是开始就不行吗?
import re
s = " Hello,oeasy!\nHello, World!"
pattern = r"^Hello"
matches = re.findall(pattern, s)
print(matches)
- 加了个空格
- 不是开始就不行
- 好像 行尾也算结束!
import re
s = " Hello,oeasy..Hello,oeasy"
pattern = r"oeasy$"
matches = re.findall(pattern, s)
print(matches)
- 结果
- 找到一个
- 可以构造一个
- 行尾的oeasy吗?
import re
s = " Hello,oeasy\nHello,oeasy"
pattern = r"oeasy$"
matches = re.findall(pattern, s)
print(matches)
- 还是匹配一个
- 这应该怎么理解呢?
import re
s = " Hello,oeasy\nHello,oeasy\n"
pattern = r"oeasy$"
matches = re.findall(pattern, s)
print(matches)
- 还是能匹配
- $
- 只匹配结尾 的 字符串
- Match the end of the string
- 或者 结尾前换行符之前的字符串
- or just before the newline at end of the string
- 如果结尾处有多个\n呢?
import re
s = " Hello,oeasy\nHello,oeasy\n\n\n"
pattern = r"oeasy$"
matches = re.findall(pattern, s)
print(matches)
- 匹配不到了
- 还想匹配到怎么办?
import re
s = " Hello,oeasy\nHello,oeasy\n\n\n"
pattern = r"oeasy\n*$"
matches = re.findall(pattern, s)
print(matches)
- 匹配结果
- 这次了解了三个re的函数
- search
- findall
- finditer
- 三个元字符
.
任意非换行字符^
匹配 开头位置$
匹配结束位置
- 这开始和结束
- 刚好和vim跳转一致
- 你说巧不巧
- 还有什么 元字符 呢?🤔
- 下次再说👋🏻