断言的几种方式
(1)\b 单词边界 \b并不匹配任何内容,他只是标记文本的位置 整个文本的第一个单词一定是边界 .,|'",。等等也是边界
例如
row tomorrow.haha.
使用正则表达式
\b(\w+)
可以匹配如下内容
(2)^ 开头后面必须是 ***
$ 结束之前必须是***
------------------------------------举例-------------------------
string = '''hahahha cfldk
bbbbb sdfdl;
ccccc sdmflkd
'''
print(string)
#(?m)是多行模式 不加是普通模式匹配整个文本 在多行模式下 一共有4行 最后一行什么都没有是 空‘’
pattern1 = re.compile(pattern='(?m)^(\w?)')
pattern2 = re.compile(pattern='^\w?')
res1 = pattern1.findall(string=string)
res2 = pattern2.findall(string=string)
#findall 返回一个列表 ['h', 'b', 'c', ''] 里表里面装的字符串
print(res1)
print(res2)
#finditer 返回的是一个迭代器,适合处理大量数据或当只需要部分匹配结果时。
res = pattern1.finditer(string)
for i in res:
print(i) #默认是整个匹配对象 i 是一个 Match 对象。这个对象包含了关于每一次匹配的所有信息。
print(i.group()) #打印正则匹配的结果字符串 返回匹配到的文本。
print(i.group(0)) #打印正则匹配的结果字符串 返回匹配到的文本。
#print(i.string) #打印正则匹配的结果字符串 返回整个原始字符串。
#print(i.start()) #打印正则匹配的开始位置
#print(i.end()) #打印正则匹配的结束位置
'''
import re
pattern = re.compile(r'(\w+) (\w+)')
string = "John Doe is a developer"
res = pattern.finditer(string)
for i in res:
print("Entire Match:", i.group(0)) # 等同于 i.group()
print("First Group:", i.group(1))
print("Second Group:", i.group(2))
print("All Groups:", i.groups()) #返回所有子组的文本,以元组的形式返回。在这个例子中,("John", "Doe") 是所有子组的文本。
print()
i.group(0) 或 i.group():
返回整个匹配的文本。在这个例子中,"John Doe" 是整个匹配的文本。
i.group(1):
返回第一个子组的文本。在这个例子中,"John" 是第一个子组的文本。
i.group(2):
返回第二个子组的文本。在这个例子中,"Doe" 是第二个子组的文本。
i.groups():
返回所有子组的文本,以元组的形式返回。在这个例子中,("John", "Doe") 是所有子组的文本。
'''
--------------------------------------------------------------------------------
(3) (?m) 表示多行模式
(?s) 表示单行模式 默认模式:点号 . 不匹配换行符 \n。单行模式 (?s):点号 . 可以匹配任何字符,包括换行符 \n。
(?i) 不区分大小写
(4)环视的用法如下图:
import re
string = '''
hahahha cfldk
bbbbb sdfdl;
ccccc sdmflkd
'''
#前面是bb 后面是字母 的字符串 但是不包含前面的 bb
pattern1 = re.compile(pattern='(?<=bb)\w+')
#结果是匹配 bbb 而不是 bbbbb
#finditer 返回的是一个迭代器,适合处理大量数据或当只需要部分匹配结果时。
res = pattern1.finditer(string)
for i in res:
print(i) #默认是整个匹配对象 i 是一个 Match 对象。这个对象包含了关于每一次匹配的所有信息。
print(i.group()) #打印正则匹配的结果字符串 返回匹配到的文本。
print(i.group(0)) #打印正则匹配的结果字符串 返回匹配到的文本。