Re正则表达式

re正则表达式总结

  • 0、一般字符


    字符意义
    .a.c → abc,aic,a&c等(不包括换行符
    \转义字符,让字符变回原来的意思
    […]在括号中任选一个:a[bcd] → ab,ac,ad


  • 1、预定义字符

    字符意义
    \d匹配一个数字字符,等价于[0-9]
    \D匹配一个非数字字符,等价于[^0-9]
    \s匹配任何空白字符如空格、制表符、换页符等等价于[\f,\n,\t,\r,\v]
    \S非空白字符等价于[^\f,\n,\t,\r,\v]
    \w匹配任意字母(包括下划线)等价于[A-Z,a-z,0-9,_]
    \W匹配非单词字符为\w取反


  • 2、数量词

    字符意义
    *匹配前一个字符0或无限次,如ab*c → abbc,ac,abc等
    +匹配前一个字符1或无限次,如ab+c → abc,abbc,abbbc等
    匹配前一个字符0或1次,如ab?c → ac,abc,
    {m}匹配前一个字符m次
    {m,n}匹配前一个字符m到n次

    数量词跟在. 预定义字符等后面表示该字符的数量比如:\d?表示0到无穷个数字字符。

  • 3、边界匹配(了解,爬虫中很少用)

    字符意义
    ^匹配字符串的开头,如^abc → 匹配以abc开头的字符串
    $匹配字符串的结尾,如abc$ → 匹配以abc结尾的字符串
    \A
    \Z

  • ",*?"匹配任意字符

---
  • 4、修饰符

    修饰符主要配合后面的各种方法使用

    字符意义
    re.I使匹配对大小写不敏感
    re.L做本地化识别匹配
    re.M多行匹配,影响^和$
    re.S使匹配包括换行符在内的所有字符(做多行匹配时用)
    re.U根据Unicode字符集解析字符。影响\w,\W,\b,\B
    re.X给予更灵活的格式,以便将正则表达式写得更易理解

    使用的最多的是re.S ,当要匹配的内容有多行时可以使用这个修饰符.

    例如:findall()方法是逐行匹配的,当某行没有匹配到数据时就会从下行开始,这时可以用re.S修饰符使它不再从头开始匹配。


    import re

    a = ‘’‘<某标签>数据

    <某标签>’‘’

    word = re.findall(‘<某标签>(.?)<某标签>‘,a)

    print(word)

    结果得到一个空列表,若加上re.S修饰符即 word = re.findall(’<某标签>(.?)<某标签>’,a,re.S) 则会打印"数据 "。


  • 5、search()、sub()、findall()方法

    findall(pattern,string,flag = 0)
    - para:
    - (1)pattern : 要匹配的正则表达式
    - (2)string : 要匹配的字符串
    - (3)flags : 标志位(即修饰符),用于控制正则表达式的匹配方式,比如换行匹配,是否区分大小写等。
    这里要注意一个问题,在findall中如果想要子模式或者捕获分组之类的如(the|The)、(\d)$1等要用中括号"[]"否则findall会只匹配括号内的匹配项比如: <...>(.*?)<\...>这个pattern用findall结果是不带<...>标签对的,而search()方法就不会有这个问题。
    search(pattern,string,flags = 0)
    - para:
    - (1)pattern : 要匹配的正则表达式
    - (2)string : 要匹配的字符串
    - (3)flags : 标志位(即修饰符),用于控制正则表达式的匹配方式,比如换行匹配,是否区分大小写等。

    search方法用于在给定的字符串中搜索与指定的模式匹配的内容,并返回一个匹配对象(Match object)。匹配对象是包含匹配结果的特殊对象,它具有各种属性和方法,可用于获取有关匹配的详细信息。如果找到了匹配项,则search方法返回匹配对象;如果没有找到匹配项,则返回None。
    例:
    import re
    a = 'one1two2three3'
    infos = re.search('\d+',a)
    print(infos)

    结果:<_sre.SRE_Match object; span(3,4),match='1'>
    print(infos.group())#可以通过group方法获取匹配对象的值。在这种情况下,match.group()返回整个匹配项,match.group(1)返回第一个捕获组,match.group(2)返回第二个捕获组
    search方法只返回第一个匹配项,因此它通常用于判断是否存在匹配项或仅需获取第一个匹配项的情况。而findall方法适用于需要获取所有匹配项的情况,且findall方法返回的是一个列表。


    sub(pattern,repl,string,count = 0,flags = 0)
    - para:
    - (1)pattern: 要匹配的正则表达式
    - (2)repl: 要用来替换的字符串
    - (3)string: 要被查找替换的原始字符串
    - (4)count: 模式匹配后替换的最大次数,默认0表示替换所有的匹配
    - (5)flags: 标志位,同search

    例:将123-456-789中的"-"去掉
    import re
    phone = '123-456-789'
    new_phone = re.sub('\D','',phone)
    print(new_phone)
    结果为:123456789
正则表达式Regular Expression)是一种强大的工具,用于字符串的匹配、替换和提取等操作。在开发过程中,使用合适的插件或工具可以极大提高效率。以下是一些与正则表达式相关的插件推荐: ### 常用正则表达式相关插件 1. **RegexBuddy** RegexBuddy 是一款专为正则表达式设计的工具,支持多种编程语言的语法,包括 JavaScript、Python、Java 等。它提供了可视化界面,可以帮助用户构建和测试正则表达式,并实时显示匹配结果[^2]。 2. **RegExr** RegExr 是一个在线工具,支持 JavaScript 的正则表达式语法。它提供了一个简洁的界面,允许用户直接输入正则表达式并查看匹配结果,同时支持语法高亮和错误提示功能[^1]。 3. **Visual Studio Code 插件:Regex Previewer** 如果使用 Visual Studio Code 编辑器,可以通过安装 **Regex Previewer** 插件来实时测试正则表达式。该插件允许用户在编辑器内编写正则表达式,并立即查看匹配结果。 4. **PyCharm / IntelliJ IDEA 内置支持** JetBrains 系列 IDE(如 PyCharm 和 IntelliJ IDEA)内置了强大的正则表达式支持。在搜索和替换功能中,可以直接使用正则表达式,并通过高亮显示匹配内容。 5. **Regex Tester (Chrome 扩展)** 这是一个简单的浏览器扩展,可以在 Chrome 浏览器中快速测试正则表达式。它支持常见的正则表达式操作,并提供即时反馈。 6. **JavaScript 正则表达式测试工具 (JSRegeX)** 专门针对 JavaScript 开发者设计的工具,允许用户在浏览器中测试正则表达式,并生成代码片段以供直接使用[^1]。 ### 使用建议 - **选择适合工作流的工具**:如果主要使用特定 IDE(如 VSCode 或 PyCharm),优先考虑其插件生态中的正则表达式工具。 - **跨平台测试需求**:对于需要多平台兼容性的开发者,推荐使用在线工具如 RegExr 或 JSRegeX,以便快速验证正则表达式的有效性。 - **学习与调试辅助**:初学者可以借助 RegexBuddy 等工具进行学习,通过图形化界面逐步理解复杂的正则表达式结构。 ### 示例代码 以下是一个简单的 JavaScript 示例,展示如何使用正则表达式进行字符串匹配: ```javascript const text = "Hello, my email is [email protected]"; const regex = /\b[\w.-]+@[\w.-]+\.\w+\b/; const match = text.match(regex); console.log("匹配到的邮箱:", match); // 输出匹配的邮箱地址 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值