`

python内置库:re(正则表达式)

阅读更多
 1、正则表达式是用于处理字符串的功能强大的工具,但它并不是Python所独有的,许多编程语言都支持正则表达式,用法也都区别不大;

  2、Python中正则表达式的应用在re模块中,re模块中的方法使用正则表达式来匹配字符串;

  3、Python中的数量词默认是贪婪的,总是尝试匹配尽可能多的字符;非贪婪的则相反,总是尝试匹配尽可能少的字符(例如:正则表达式"ab*"如果用于查找"abbbc",将找到"abbb";而如果使用非贪婪的数量词"ab*?",将找到"a"。);

  4、与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。

  5、如下是常用正则表达式语法:

语法 说明 正则表达式实例 匹配字符串 匹配结果
. 匹配任意字符,除换行符“\n”外 r'a.' 'abc' 'ab'
\ 转义字符,可以用来匹配特殊的字符 r'a\*' 'a*b' 'a*'
特殊字符也可以放在[]字符集中来匹配 r'a
  • ' 'a*b' 'a*'
  • []或[^...] 字符集[],匹配字符集中的一个字符,从开始匹配直到匹配成功 r'a[efg]' 'afggg' 'af'
    开头加上“^”表示取反,即只要不是字符集中列出的字符都可匹配成功
    可以在[]列出全部想要匹配的字符,也可以列出字符的范围,如[a-c]或[abc]
    所有特殊字符放在字符集中都失去在正则表达式中的原有的意义
    \d 匹配单个数字字符:0到9 r'a\d' 'a345b' 'a3'
    \D 匹配非数字字符 r'a\D' 'ab3' 'ab'
    r'a[^\d]' 'ab3' 'ab'
    \s 匹配空白字符:空格,\t,\r,\n,\f,\v r'a\s' 'a\n' 'a\n'
    \S 匹配非空白字符 r'a\S' 'ab' 'ab'
    r'a[^\s]' 'ab' 'ab'
    \w 匹配单词字符:[a-zA-Z0-9_] r'a\w' 'a9' 'a9'
    \W 匹配非单词字符 r'a\W' 'a+' 'a+'
    * 匹配前一个字符0到无限次 r'ab*' 'a' 'a'
    + 匹配前一个字符1到无限次 r'ab+' 'abbbcde' 'abbb'
    ? 匹配前一个字符0次或1次 r'ab?' 'abbbcde' 'ab'
    {m} 匹配前一个字符m次 r'ab{2}' 'abbbcde' 'abb'
    {m,n} 匹配前一个字符m次至n次 r'ab{1,2}' 'abbbbcde' 'abb'
    m和n可省略,{m,}匹配前一个字符m次至无限次,{,n}匹配前一个字符0次至n次
    *?或+?或??或{m,n}? 使*、+、?和{m,n}的匹配变成非贪婪模式(Python默认是贪婪模式) r'ab+?' 'abbbcde' 'ab'
    ^ 匹配字符串的开头(用在字符集中[]表示取反) r'^ab' 'abbb' 'ab'
    $ 匹配字符串的结尾 r'cd$' 'abcd' 'cd'
    () 括号中的内容被作为分组 r'a(def){2}b' 'adefdefbcc' 'adefdefb'
    ()后可以接数量词
    |  相当于“或”,从左到右匹配被|分隔的表达式,一旦匹配成功就不会继续往后匹配了。 r'abb(c|d)' 'abbdefg'  'abbd' 
    ?: 取消分组。想使用括号,但是不想它成为分组,就可以使用这个语法。 re.findall(r'abb(?:c|d)', 'abbdefg') 'abbd'
    \<num> 引用指定编号的分组结果。 re.sub(r'a(a)b(b)', r'\2dd\1', 'aabbcc') 'bddacc'


    re模块中的几个常用方法(pattern为正则表达式,string为需要匹配查找的字符串):

    re.compile(pattern):编译正则表达式,返回编译后的模正则表达式对象,该对象同样拥有match、search等方法。如果某个正则表达式需要多次使用,建议使用此函数先预编译正则表达式,可以提升正则表达式部分的程序性能。
    re.match(pattern, string):匹配字符串的开头,成功则返回匹配对象,否则返回None。
    re.search(pattern, string):从字符串开头开始查找匹配,直到匹配成功,则不再往后继续查找匹配,成功返回匹配对象,否则返回None。
    re.findall(pattern, string):查找匹配字符串中所有内容,返回查找成功的字符串的列表,如果字符串中没有匹配成功的内容,则返回空列表,如果pattern中有括号()分组,则列表中只返回匹配成功后的分组中的字符串内容。
    re.sub(pattern, repl, string, count=0):使用正则表达式pattern在字符串string中匹配查找,匹配查找成功后使用新字符串repl替换掉匹配成功的字符串,并返回,count为替换次数,默认0不是替换0次,而是替换所有。repl中可以使用“\<num>”形式引用pattern中的分组内容。repl也可以是函数,该函数的参数为匹配对象,且应该返回一个字符串用于替换匹配成功的字符串,具体示例见下方的代码。
    re.split(pattern, string, maxsplit=0):使用匹配成功后的字符串作为“分割符”,返回分割后的字符串列表,maxsplit为分割的次数,默认0不是分割0次,而是分割所有。建议简单的字符串分割首选字符串本身的split方法,复杂的分割才考虑正则表达式。
    re.finditer(pattern, string):返回全部查找结果的迭代器,每个迭代对象为匹配对象,可以使用group()和groups()获取匹配成功的结果,如果没有匹配成功的字符串,则返回一个空的迭代器(不是None)。
     注:

    group(*args):匹配对象的group()默认返回匹配成功的整个字符串,如果正则表达式中有括号分组,可以指定返回第几个分组结果,指定时从1开始计数,比如group(2)返回匹配成功的字符串中的第二个分组结果;也可以指定返回多个分组结果,结果以元组的形式返回,比如group(1, 2, 3)以元组返回匹配成功的字符串中的第一、第二和第三个分组结果;如果正则表达式中给某个或某几个分组指定了别名,则可以使用别名来代替分组编号来获取匹配成功的对应分组结果。
    groups():匹配对象的groups()以元组的形式返回匹配成功后括号中分组的内容,相当于group(1,..., n),但是正则表达式中没有括号分组,则返回空元组,即使匹配成功,也是返回空元组。



    分享到:
    评论

    相关推荐

      Python-PythonCreateReProjectpython自动生成正则表达式项目

      2. **Python的re模块**:Python内置的re模块提供了正则表达式的操作函数,如`match`、`search`、`findall`、`sub`等,了解这些函数的用法对于使用本项目至关重要。 3. **逆向生成正则表达式**:这个项目的核心算法...

      Python基础入门知识之正则表达式学习 正则表达式30分钟入门教程 共21页.pdf

      Python作为一门广泛使用的编程语言,内置了强大的正则表达式支持。本教程旨在帮助初学者在30分钟内对Python中的正则表达式有一个基本的认识。 一、本文目标 本教程的目标是让读者快速理解正则表达式的概念,学会...

      正则表达式学习资料以及练习项目代码很多

      - **`re`模块**:Python内置的正则表达式库,提供了`match`、`search`、`findall`、`sub`等方法。 - **编译正则表达式**:使用`re.compile()`函数将正则表达式编译为`Pattern`对象,提高匹配速度。 - **模式方法*...

      Python程序设计:正则表达式概念与语法.pptx

      在Python中,正则表达式主要通过内置的`re`模块来实现。下面我们将深入探讨正则表达式的基本概念、语法及其在邮箱验证中的应用。 首先,正则表达式的核心概念是模式匹配,它能够检查一个字符串是否符合预先设定的...

      python正则表达式使用指南

      在Python 1.5及以后的版本中,`re`模块引入了Perl风格的正则表达式,相较于早期的regex模块,它们更加灵活且功能丰富。 文档分为多个部分,逐步深入正则表达式的使用: 1. **简单模式**:介绍基本的字符匹配和重复...

      通过正则表达式生成数据

      2. **利用编程语言**:大多数编程语言如Python、Java、JavaScript等都内置了正则表达式的支持,并提供了方法来生成符合正则表达式的随机字符串。例如,Python的`re`模块配合`random.choice`或`random.choices`可以...

      正则表达式调试工具

      同时,内置的经典例程有助于新手快速熟悉正则表达式的各种用法,提升开发效率。 在实际应用中,正则表达式常用于数据验证,如邮箱、电话号码格式的检查;文本搜索和替换,如批量修改文档中的特定模式;以及在编程...

      正则表达式分析工具V2.0

      4. **代码生成**:根据输入的正则表达式自动生成对应的编程语言代码片段,如Python的`re`模块或JavaScript的`RegExp`对象,方便用户在项目中应用。 5. **学习资源**:可能内置了正则表达式语法的教程和参考资料,供...

      清华大学精品Python学习PPT课件-第5章 Python正则表达式.pptx

      在Python中,使用`re`模块来处理正则表达式。一些常用功能包括: - `re.search(pattern, string)`:在字符串中查找第一个匹配的模式。 - `re.findall(pattern, string)`:找到所有匹配的子串,并返回列表。 - `re....

      正则表达式 Regular Expression 正则表达式资料大全压缩包

      2. **Python**:内置`re`模块提供丰富的正则操作函数,如`re.match()`, `re.search()`, `re.findall()`等。 3. **Java**:`java.util.regex`包提供了`Pattern`和`Matcher`类来处理正则表达式。 4. **Perl**:Perl...

      正则表达式综合练习

      10. **编程语言支持**:大多数编程语言都内置了正则表达式支持,如Java(Test.java中的例子可能涉及Java的`Pattern`和`Matcher`类),Python的`re`模块,JavaScript的`match`、`replace`等方法。 11. **优化技巧**...

      regexp正则表达式正则表达式正则表达式

      - **Python**:Python 中的 `re` 模块提供了正则表达式的功能。 - **JavaScript**:JavaScript 也内置了正则表达式的支持。 - **grep/egrep**:Unix/Linux 下的命令行工具,用于在文件中搜索匹配正则表达式的行。 #...

      python正则表达式_深入浅出

      - 编译正则表达式:使用`re.compile()`可以提前编译正则表达式,提高匹配效率。 - 避免过度复杂的正则表达式:过于复杂的模式可能导致性能下降,应尽量保持简洁。 7. 正则表达式在Python中的应用: - **文本处理...

      正则表达式匹配/可以自定义正则表达式

      例如,如果你想验证一个字符串是否为有效的邮箱地址,你可以使用如下的正则表达式: `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$` 这个表达式的含义是:字符串必须以字母、数字、下划线、点、百分号、加号...

      正则表达式的妙用

      在实现这个功能时,你可能使用了编程语言如Python、JavaScript或者Java,这些语言都内置了对正则表达式的支持。例如,Python中的`re`模块提供了编译、匹配和搜索等函数,通过这些函数,你可以构建并执行正则表达式,...

    Global site tag (gtag.js) - Google Analytics