`
chungang
  • 浏览: 33095 次
社区版块
存档分类
最新评论

正则基础知识(括号的使用)

 
阅读更多
一、分组功能
   括号作用于几个字符的话,就说明这几个字符是一个整体,比如(ab)+就匹配ab作为一个整体出现的情况
   例如:
   print re.search(r"^ab+$", "abb") != None   # =>True
   print re.search(r"^ab+$", "abab") != None   # =>False
   print re.search(r"^(ab)+$", "abb") != None  # =>False
   print re.search(r"^(ab)+$", "abab") != None # =>True
   一种常见的用法就是要匹配m或者n个字符的时候,就可以用分组来实现:\d{13,16}表示13-16个数字,如果要表示13或者16个数字的时候就可以用 \d{13}(\d{3})?

二、多选结构
   多选结构的形式: "|"
   比如要匹配IP地址一个字段:([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])
   注意:^ab|cd$ 表示的是(^ab|cd$),指字符串开头的ab或者字符串结尾的cd,要表示只包含ab或者cd的字符串需要用^(ab|cd)$

三、引用分组
   使用括号之后,正则表达式会保存每个分组真正匹配的文本,等到匹配完之后,通过group(num)之类的方法引用分组在匹配时获取的内容。
   例如:表示日期字符串:2010-12-22,匹配表达式为(\d{4})-(\d{2})-(\d{2})
   print re.search(r"(\d{4})-(\d{2})-(\d{2})", "2012-12-22").group(1) # =>2012
   print re.search(r"(\d{4})-(\d{2})-(\d{2})", "2012-12-22").group(2) # =>12
   print re.search(r"(\d{4})-(\d{2})-(\d{2})", "2012-12-22").group(1) # =>22
   print re.search(r"(\d{4})-(\d{2})-(\d{2})", "2012-12-22").group(0)
   # =>2012-12-22 (编号为0的分组对应整个表达式匹配的文本)

   对于嵌套的括号,分组的编号是根据开括号出现的顺序来计数的, 例如:
   (((\d{4})-(\d{2}))-(\d{2})),编号为0和编号为1的分组对应2012-12-22,编号为2的分组对应2012-12,编号为3的分组对应2012,编号为4的分组对应12,编号为5的分组对应22

  python语言中进行正则表达式的替换方法是re.sub(pattern, replacement, string),其中pattern是用来匹配被替换文本的表达式,replacement是要替换成的文本,string是要进行替换操作的字符串,比如re.sub(r"[a-z]", " ", string)就是将string中的小写字母替换成空格,例如:
  print re.sub(r"[a-z]", " ", "1a2b3c") # =>1 2 3

  在replacement中也可以引用分组,形式是\num,num是对应分组的编号
  例如:
  print re.sub(r"(\d{4})-(\d{2})-(\d{2})", r"\2/\3/\1", "2012-12-22")
  # =>12/22/2010   (其中r"\2/\3/\1" 也可用用"\\2/\\3/\\1"替换)
  值得注意的是此处不能用\0,因为\0已经被用作八进制形式表示的字符,如果需要取相同的值得话,可以先用括号把整个表达式加上一对括号,之后用\1来引用

四、反向引用
  如果希望检查某个单词是否包含重叠出现的字母,就需要用到反向引用,反向引用就是在正则表达式内部引用之前捕获分组匹配的文本,例如([a-z])\1匹配连续重叠字母的表达式
  例如:
  print re.search(r"^([a-z])\1\1$", "aa") != None   # =>True

  pairedTagRegex = r"<([^>]+)>[\s\S]*?</\1>"
  print re.search(pairedTagRegex, "<bold>text</bold>") != None # =>True

  pairedTagRegex = r"<([a-zA-Z0-9]+)(\s[^>]+)?>[\s\S]*?</\1>"
  print re.search(pairedTagRegex, "<span class=\"class1\">text</span>") != None
  # =>True

注意:python中\10表示第10个编号的分组,所以如果要表示第一个编号的分组加上0的话就可以使用\g<1>0这种方式,这样可以避免二义性

五、命名分组
  又有用数字编号来表示分组不够直观,并且括号多了之后容易混淆,所以一些语言和工具又提供了命名分组,在Python中用(?P<name>)来分组,再用group(name)来获得对应分组匹配的文本
  例如:
  namedRegex = r"(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})"
  result = re.search(namedRegex, "2012-12-22")
  print result.group("year")  # =>2012
  print result.group("month")  # =>12
  print result.group("day")    # =>22
  print result.group(1)  # =>2012

六、非捕获分组
  用非捕获分组修饰的表达式,在引用分组的时候会略过,非捕获表达式的形式为:(?:\d{4})

七、括号的转义
  ()|这三个符号在转义的时候都必须转义,不能只转义一个比如"^\(a\|b\)$"
分享到:
评论

相关推荐

    正则表达式的基础知识!

    以下是对正则表达式基础知识的详细解释: 1. **基础匹配**: - **基础匹配**:最简单的正则表达式就是你要匹配的文本本身,如"cat",可以匹配含有"cat"的字符串。 2. **句点符号(.)**: - **句点符号**:"....

    正则表达式基础知识

    正则表达式的基础知识包括理解元字符、限定符、特殊字符以及如何构建和使用正则表达式。 ### 元字符 元字符是正则表达式中具有特殊意义的字符,它们帮助我们定义模式的结构。以下是一些常见的元字符及其功能: - ...

    正则表达式 基础知识 一张纸

    ### 正则表达式基础知识详解 正则表达式(Regular Expression)是一种强大的文本处理工具,在数据提取、格式验证以及文本搜索替换等场景中发挥着关键作用。本文将深入解析正则表达式的各种元字符、量词、锚点、字符...

    PHP正则表达式基础知识

    ### PHP正则表达式基础知识详解 正则表达式是一种强大的文本匹配工具,广泛应用于各种编程语言中,包括PHP。在日常开发中,正则表达式能够帮助我们进行字符串搜索、替换以及提取等操作,尤其在数据验证、文本解析等...

    正则表达式-基础知识

    ### 正则表达式基础知识详解 #### 一、正则表达式基础符号解析 学习正则表达式的首要步骤是熟练掌握其基本符号及其含义。以下将详细介绍正则表达式中的几种核心符号及其功能: 1. **`.`(点号)** - **作用**:...

    java/Android 正则表达式详解

    Java 正则表达式详解是一份详细的正则表达式使用指南,它涵盖了正则表达式的基础知识、语法、实践应用等方面的内容。本文首先简要地介绍了正则表达式的基础知识,然后以 Jakarta-ORO API 为例,详细地介绍了如何使用...

    正则表达式基础学习笔记

    正则表达式(Regular Expression,简称regex)是用于...通过熟练掌握上述基础知识,你将能够编写出高效且精准的正则表达式,大大提高文本处理的效率。在实际应用中,不断实践和积累经验,是成为正则表达式高手的关键。

    php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串

    知识点二:正则表达式中括号的使用 在正则表达式中,圆括号"()"、方括号"[]"和花括号"{}"都有各自特殊的用途和含义。圆括号用于捕获匹配的内容,这在需要提取匹配子串时非常有用;方括号用于指定字符集,匹配方括号...

    正则表达式入门基础知识

    - **括号**:`( )`用于创建分组,分组内的规则可以一起被引用或捕获。 - **反向引用**:`\数字`用于引用前面第n个分组的内容。 4. **预查与否定预查** - **预查**:`(?=pattern)`表示正向预查,确保后面紧跟的是...

    正则表达式.doc 正则表达式

    正则表达式的基础知识包括以下几个核心概念: 1. **句点符号 (.)**:句点匹配任意单个字符,包括空格和换行符。例如,"t.n"会匹配到"tan", "ten", "tin", "ton"以及包含"t"和"n"的其他组合。 2. **方括号符号 ([.....

    正则式.pdf 正则式.pdf

    ### 正则表达式基础知识与Java中的应用 #### 一、正则表达式基础知识 **1.1 句点符号** 正则表达式中的句点符号`.`是一种通配符,它可以匹配任何单个字符(除了换行符)。例如,如果你想要匹配所有以“t”开头...

    01C#正则表达式基础教程.doc

    本教程旨在为C#开发者提供正则表达式的基础知识,帮助理解正则表达式的概念、语法和常见用途。通过学习,你将能够编写和使用正则表达式进行文本匹配、验证和处理。 2. **如何使用本教程** 本教程适合对正则表达式...

    正则表达式入门教程(pdf版)

    通过本教程的学习,你已经掌握了正则表达式的基础知识,包括各种元字符、字符类、分组、后向引用等概念。在后续的学习中,可以尝试将这些基础概念结合起来,解决更复杂的文本处理问题。此外,多加实践是非常重要的,...

    python正则表达式使用指南

    这篇指南覆盖了正则表达式的基础到进阶知识,对于想要在Python中使用正则表达式的人来说,是一个非常有价值的资源。通过学习,你可以熟练地处理字符串匹配、分片、替换等各种任务,提升文本处理的能力。

    常用java正则表达式

    #### 二、正则表达式基础知识 ##### 2.1 句点符号 句点符号(`.`)是正则表达式中最基础的元素之一,它代表任意单个字符。例如,`t.n`可以匹配所有以`t`开头、以`n`结尾且中间只有一个字符的字符串,如`tan`、`ten`...

    正则表达式 一个关于正则表达式的基础文件

    在本篇文章中,我们将深入探讨正则表达式的基础知识及其应用。 1. 正则表达式的基本规则 - 普通字符:在正则表达式中,字母、数字、汉字、下划线以及其他未被赋予特殊意义的标点符号被视为普通字符。它们会匹配...

    正则表达式基础(全)

    正则表达式是一种强大的文本处理工具,用于查找、替换和提取...掌握正则表达式的基础知识和C#中的使用方法,能够极大地提高你在处理字符串时的效率和灵活性,无论是验证用户输入、数据提取还是文本处理,都能游刃有余。

Global site tag (gtag.js) - Google Analytics