python&正则表达式&高级

本文介绍了Python正则表达式的常见应用场景,如用户输入验证和数据清洗,并详细讲解了匹配规则,包括单个和多个字符、开头和结尾、分组、贪婪与非贪婪匹配。此外,还探讨了原始字符串`r`的作用以及提供了匹配邮箱、电话和提取网页图片URL的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、常见应用场景

  • 1.1 验证用户输入是否符合规范

  • 1.2 数据清洗、文本查询

二、规范

  • 2.1 匹配单个字符

    \d匹配数字0-9 (十进制)
    \D匹配数字以外的字符
    \w匹配数字、字母、下划线;-> 慎用,还可以匹配中文等Unicode码
    \W匹配除数字字母下划线中文以外的字符
    \s匹配空白字符串;包括\t,\r,\n,空格,tab键等
    \S匹配非空字符串
    .可以匹配 除换行字符\n外的任意字符
    []可以匹配它内部的任意单个字符,它们地位平等;所以不要画蛇添足加“,”或着“space”等; [^] 表示除了中括号内的原子均可匹配。如abc 匹配除了a,b,c之外的其它任意字符,注意:abc都要剔除而不是只剔除a。
  • 2.2 匹配多个字符

    *匹配前一个字符出现0次、1次、多次
    +匹配前一个字符出现1次或多次
    匹配前一个字符出现0次或1次
    {m}匹配前一个字符出现m次
    {m,n}匹配前一个字符出现m到n次
    {m,}匹配前一个字符出现 至少m次
  • 2.3 匹配开头和结尾:功能定位符

    ^定位匹配开始的位置;注:这个符号放在中括号内部的开头,表示“取反”的意思
    $定位匹配结束的位置
  • 2.4 匹配分组

    竖杠 |匹配左右任意一个表达式。为避免歧义:常常配合小括号使用,如(163|126|qq).com来匹配不同邮箱
    (ab)将括号中的字符作为一个整体,来进行不同的操作;默认group()取出匹配到的所有内容;group(1) - 匹配到的是第一个,索引从第一个开始;扩展:<h1>.*<\h1> 会用到 () 和 \1
    \num引用分组num匹配到的字符串
    (?P<name>)分组取别名,name为别名;注:需要小括号
    (?P=name)引用别名为name分组取到的字符串
  • 2.5 re模块的函数

    re.match(匹配模式,源字符串,flag -->可选参数,对应标志位可以放模式修正符等信息)默认从源字符串起始位置开始匹配,如果有多个结果满足只返回第一个。可以通过group()筛选后返回;有些情况下:写参数Pattern时可以不写^,但是一定要写$,但是在别的语言中match不一定是这个用法
    re.search()从全文中进行检索并匹配,如果有多个结果满足,只返回第一个,可以通过group()筛选后返回
    re.sub(pattern, 要替换的结果,目标字符串)将匹配到的字符串进行替换,返回|整个|(新)字符串,且将匹配到的内容全部替换为要替换的内容,且默认以字符串返回。
    re.sub(pattern, 函数名,目标字符串,[max-->最多替换的次数,如果不写则默认全部替换])将匹配到的字符串结果作为参数传递到函数中,并进行操作后,return str ,必须返回字符串。最后,进行替换后打印出来。
    re.findall(匹配模式,源字符串,[flag])re.findall()自动返回所有正确匹配的结果,不需要group(),且以列表的形式返回。部分地方会写成:re.comlile(pattern).findall(string)
    re.split()根据匹配进行切割字符串,并返回一个列表;
    匹配成功后的(过滤后)展示方式匹配结果.group(),将匹配到的结果以字符串的形式展示出来;匹配结果.span(),以元组的形式展示匹配成功的起止索引,如(0,8)
  • 2.6 贪婪匹配与非贪婪匹配

    • 1.在条件成立的条件下,python默认贪婪,在匹配成立的条件下,匹配的越多越好

    • 2.?--->非贪婪,成立,匹配的越少越好

    • 3.[ . , * , ? , {n,m} ]后面都可以接非贪婪

    • 4.通配字 . 那它在从左到右的顺序求值时,会尽量“抓取”满足匹配最长字符串

  • 2.7 r -->raw:原始字符串

    • 1.如果在正则表达式中使用了某些普通字符,比如.*?等需要转义,如提取图片网址"XXX.jpg"对 . 要进行转义

    • 2.python解释器中默认要对有特殊含义的字符串进行转义,所以原始字符串中可能就要出现两个反斜杠;而匹配模式中,要想成功匹配就需要对原始字符串中的两个反斜杠分别都进行转义才能表达原来两个\的意思,所以,就需要两倍的\,变成\\。

    • 3.引入r解决:转义再转义,加r之后只需要和原始字符串保持一致即可不需要再多加;不需要转义,加不加r没区别

三、demo

  • 1.匹配邮箱

  • 2.匹配电话

  • 3.提取网页图片http

  • 拉勾网职位信息处理...

在使用 Python 正则表达式(regex)对文本内容进行拆分时,可以利用 `re` 模块中的 `split()` 函数。该函数允许根据匹配的正则表达式模式来分割字符串,并返回一个包含拆分后结果的列表。 ### 基本用法 `re.split(pattern, string)` 的基本语法如下: - `pattern`: 定义要匹配的正则表达式。 - `string`: 要被拆分的目标字符串。 例如,若希望将 URL 查询参数按照 `?` 和 `&amp;` 分割符进行拆分,则可以使用以下代码: ```python import re s = 'https://www.baidu.com/s?wd=aly&amp;rsv_spt=1&amp;rsv_iqid=0xb9b42cc1000bd454&amp;issp=1&amp;f=8&amp;rsv_bp=1&amp;rsv_idx=2&amp;ie=utf-8&amp;tn=baiduhome_pg&amp;rsv_enter=1&amp;rsv_dl=ib&amp;rsv_sug3=8&amp;rsv_sug1=12&amp;rsv_sug7=100&amp;rsv_sug2=0&amp;rsv_btype=i&amp;inputT=7953&amp;rsv_sug4=7953' pattern = '[?|&amp;]' # 匹配 ? 或 &amp; lst = re.split(pattern, s) print(lst) ``` 上述代码会根据指定的分隔符将 URL 字符串拆分为多个部分[^4]。 ### 高级用法 #### 使用捕获组保留分隔符 如果希望在拆分后的结果中保留匹配的分隔符,可以在正则表达式中使用捕获组 `()`。例如: ```python import re text = "apple,banana;orange" result = re.split(r'([,;])', text) # 拆分并保留逗号和分号 print(result) # 输出: ['apple', ',', 'banana', ';', 'orange'] ``` 通过这种方式,不仅能够拆分字符串,还可以获取用于拆分的符号。 #### 控制最大拆分次数 `re.split()` 还支持一个可选参数 `maxsplit`,用于限制拆分的最大次数: ```python import re text = "a,b,c,d,e" result = re.split(',', text, maxsplit=2) # 最多拆分两次 print(result) # 输出: ['a', 'b', 'c,d,e'] ``` 此功能在处理大型字符串或需要部分解析的情况下非常有用。 ### 应用场景 Python 的 `re.split()` 可广泛应用于各种文本处理任务,例如: - **URL 参数提取**:如示例所示,将 URL 中的查询参数拆分为键值对。 - **日志文件解析**:根据特定格式的日志信息进行拆分,以便进一步分析。 - **自然语言处理**:将句子拆分为单词或短语以供后续处理。 - **数据清洗**:从非结构化文本中提取结构化信息。 ### 注意事项 - 在编写正则表达式时,确保避免不必要的复杂性,以免影响性能。 - 如果目标字符串中包含特殊字符(如 `.`, `*`, `+`, `?` 等),请使用转义字符 `\` 或将其放入字符类 `[]` 中。 - 对于简单的字符串拆分任务,建议优先使用内置的 `str.split()` 方法,只有在需要更复杂的模式匹配时才使用 `re.split()`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值