正则表达式本质是一个字符串,单独使用没有意义,正则表达式需要配合正则相关的函数(re)

原子, 元字符, 模式修正符

原子(只有一个字符!!!!!):

组成正则表达式的最小单位,一个正则表达式至少需要一个原子
1 所有可见字符都是原子: a,b,c...你,我,她, +-*@#
2 所有不可见字符也是原子: \t \n \r ...
3 正则专用转义字符:
    \d  表示0-9之间任意[一个]字符  -> [0123456789]  自定义原子格式
    \D  除了上面的,任意[一个]字符
    \s  表示任意[一个]空白字符(不可见字符) -> [\n\t\v\r\f]
    \S  除了上面的,任意[一个]字符
    \w  表示0~9a~zA~Z_之间任意[一个]字符  ->  [0-9a-zA-Z_]
    \W  除了上面的,任意[一个]字符
    .   表示任意一个字符(除了\n)

元字符:[原子修饰符]

[] 自定义原子列表
    表示自定义原子列表中的任意[一个]字符

[^] 自定义排除列表
    表示原子列表之外的任意一个字符

与数量相关的元字符
+   对前面的字符表示1个以上
?   对前面的字符表示0到1个
*   对前面的字符表示0个以上
{n,m}   对前面的字符表示n到m个  (包括n,m)
{m}     对前面的字符表示m个

^   表达以什么开头   支持多行匹配模式
$   表达以什么结尾   支持多行匹配模式

\b  表示能够当作英文单词分割的字符, (除了字母和数字,都是词边界) 表达一个字符
\B  表示不能够当作英文单词分割的字符,(只能字母和数字)  表达一个字符

|   表示一个选择关系,左右的内容2选1   非常重要    唯一的运算网站

()  1.改变正则表达式中的优先级
    2.将多个原子视为一个原子处理,方便使用元字符,
    3.将匹配的内容作为模式单元进行存储


额外内容: 多行模式,如果字符串中包含\n字符,则可以在匹配的时候使用多行匹配模式
    多行匹配模式就是将每一行当作独立的字符串进行匹配.
    注意:多行需要使用模式修正符

模式修正符

设定匹配的一些额外规则.
re.A    在ASCII下进行正则匹配操作        将汉字变成不了字母操作
re.U    在UNICODE模式下进行正则匹配操作  将汉字变成字母操作
re.S    作用是将. 可以匹配任意字符  包括\n
re.M    匹配模式在多行模式下进行  都是^与$相关
re.X    匹配的时候忽略空格和注释
re.I    匹配过程中忽略大小写

\转义字符的应用

字符串: \n \r \t

因为在正则的元字符和原子当中,使用了部分的符号作为语法,为了匹配这些
符号的单纯字符格式,在正则表达式中,添加\即可去掉意义,获取字符

扩展正则语法

1. (?Limsux)        多种模式修正符号的应用
2. (?:)             取消单元存储功能,节省空间
3. (?P<name>)       自定义模式单元的名称
4. (?P=name)        获取自定义模式单元的内容
5. (?#)             正则注释内容,解析器不会处理
6. (?=)             正向先行断言  前面查找有        正向->有       反向 -> 无
7. (?!)             负向先行断言  前面查找无        先行->右边     后行 -> 左边
8. (?<=)            正向后行断言  后面查找有的
9. (?<!)            负向后行断言  后面查找没有的
10.(?(id/name)Y|N)

re模块方法

complie()   编译正则表达式,获取正则表达式对象, 可以循坏利用,提高程序效率
escape()    对字符串进行转义处理,仅处理非数字和字母的字符串
findall()   对字符串进行正则匹配 获取所有匹配的内容 以列表的方式返回
finditer()  对字符串进行正则匹配 获取所有匹配的内容 以迭代器的方式返回 节省内容
match()     对字符串进行正则匹配 以开头开始匹配 没有返回None
search()    对字符串进行正则匹配 匹配到第一个结果 停止匹配
split()     使用正则表达式切割字符串    re.split(正则,字符串,次数)
sub()       正则替换  re.sub(正则表达式,替换的字符串,匹配的字符串,次数)
subn()      正则替换  re.sub(正则表达式,替换的字符串,匹配的字符串,次数)  返回元组形式 计算次数会算下来

正则对象的方法(借助complie获取) rx表达正则对象

findall()   rx.findall(匹配字符串)
finditer()
match()
search()
split()
sub()
subn()

flags       获取当前正则对象的模式修正符
pattern     获取当前正则表达式的字符串格式
groups      模式单元的个数
groupindex

匹配结果对象方法

正则对象的扩展用法 分片设置

findall(s, 开始位置,结束位置)
finditer(s, 开始位置,结束位置)
match(s, 开始位置,结束位置)
search(s, 开始位置,结束位置)

pattern = r'\d{13}'

# print(re.compile(pattern,re.I))  # re.compile('\\d{13}', re.IGNORECASE)


data = 'hello world'
# res = re.escape(data)
# print(res)  # hello\ world


#  split()
# s = '10大8小笑哈哈'
# pattern1 = r'\d+'
# result = re.split(pattern1, s)
# print(result)


# sub
# s = '10大8小笑哈哈'
#
# pattern2 = r'笑哈哈'
# replace_s = '嘻嘻'
# result1 = re.sub(pattern2,replace_s,s)
# print(result1)



s = 'http://www.baidu.com'
pattern_1 = r'baidu'  # 正则表达式
# 我想要前10个检测有没有baidu   分片模式
rx = re.compile(pattern_1)

result = rx.findall(s,0,10)
print(result)