前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >regular expression

regular expression

作者头像
radaren
发布2018-08-28 15:07:31
6650
发布2018-08-28 15:07:31
举报

跟风学正则の笔记 测试工具

what is Regular Expression

正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。

How

From LiaoXueFeng

Simple Introduction

在正则表达式中,如果直接给出字符,就是精确匹配。

\d可以匹配一个数字,\w可以匹配一个字母或数字,所以:

  • '00\d'可以匹配'007',但无法匹配'00A'

.可以匹配任意字符,所以:

  • 'py.'可以匹配'pyc''pyo''py!'

要匹配变长的字符,在正则表达式中,

  1. *表示任意个字符(包括0个)
  2. +表示至少一个字符
  3. ?表示0个或1个字符
  4. {n}表示n个字符,用{n,m}表示n-m个字符:

A|B可以匹配A或B,所以(P|p)ython可以匹配'Python'或者'python'

^表示行的开头,^\d表示必须以数字开头。

$表示行的结束,\d$表示必须以数字结束。

如果你想查找元字符本身的话,比如你查找.,或者,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因此,你应该使用.和\。当然,要查找\本身,你也得用\.

例如:deerchao\.net匹配deerchao.net,C:\\Windows匹配C:\Windows。

In Python

代码语言:javascript
复制
import re# 从头找,找到了返回对象,找不到返回nonere.match(p,text)# 不是从第一个字符开始找obj = re.search(p,text)obj.start(),obj.end(),obj.group()# 找到多个对象re.findall(p,text)# 找到后把字符串分隔开re.split(p,text)# p替换成sre.sub(p,s,text)^ 字符串开头\b 单词开头\末尾\w 数字字母\S 不是空格+ == {1,}? 非贪婪模式
代码语言:javascript
复制
import re# emailpatten = 'bill.gates@microsoft.com'r = r'^(\w*)\.?(\w*)@(\w+).(\w+)'print(re.match(r,patten).groups())r1 = r'(<\w+\s\w+>)\s*(\w*)\.?(\w*)@(\w+).(\w+)'patten1 = '<Tom Paris> tom@voyager.org'print(re.match(r1,patten).groups())# 别人的re_email = re.match(r'^(\w+\.\w+|\w+)(\@\w+\.com)$','bill.a@microsoft.com')print(re_email.groups())

字符类型

  1. 普通字符
  2. 非打印字符 | char | description | | —- | ———————————- | | \cx | 匹配由x指明的控制字符。 | | \f | 匹配一个换页符。等价于 \x0c 和 \cL | | \n | 匹配一个换行符。等价于 \x0a 和 \cJ | | \r | 匹配一个回车符。等价于 \x0d 和 \cM | | \s | 匹配任何空白字符 空格、制表符、换页符==[\f\n\r\t\v]。 | | \S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 |
  3. 控制字符 | char | description | | —- | —————————————- | | $ | 匹配输入字符串的结尾位置。 | | ( ) | 标记一个子表达式的开始和结束位置。 | | | 匹配前面的子表达式零次或多次。要匹配 字符,请使用 *。 | | + | 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。 | | . | 匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。 | | [ | 标记一个中括号表达式的开始。要匹配 [,请使用 [。 | | ? | 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。 | |  | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n’ 匹配字符 ‘n’。’\n’ 匹配换行符。序列 ‘\‘ 匹配 “\”,而 ‘(‘ 则匹配 “(“。 | | ^ | 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。 | | { | 标记限定符表达式的开始。要匹配 {,请使用 {。 | | | | 指明两项之间的一个选择。要匹配 |,请使用 |。 | | | |
  4. 限定字符

char

description

*

匹配前面的子表达式零次或多次。例如,zo 能匹配 “z” 以及 “zoo”。 等价于{0,}。

+

匹配前面的子表达式一次或多次。例如,’zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。

?

匹配前面的子表达式零次或一次。例如,”do(es)?” 可以匹配 “do” 或 “does” 中的”do” 。? 等价于 {0,1}。

{n}

n 是一个非负整数。匹配确定的 n 次。例如,’o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。

{n,}

n 是一个非负整数。至少匹配n 次。例如,’o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。’o{1,}’ 等价于 ‘o+’。’o{0,}’ 则等价于 ‘o*’。

{n,m}

m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,”o{1,3}” 将匹配 “fooooood” 中的前三个 o。’o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。

示例

\d{3}\s+\d{3,8}

  1. \d{3}表示匹配3个数字,例如'010'
  2. \s可以匹配一个空格(也包括Tab等空白符),所以\s+表示至少有一个空格,例如匹配' '' '等;
  3. \d{3,8}表示3-8个数字,例如'1234567'

\(?0\d{2}[) -]?\d{8}。

“(”和“)”也是元字符,后面的分组节里会提到,所以在这里需要使用转义

这个表达式可以匹配几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等。我们对它进行一些分析吧:首先是一个转义字符(,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(\d{2}),然后是)或-或空格中的一个,它出现1次或不出现(?),最后是8个数字(\d{8})。

正则表达式

描述

/\b([a-z]+) \1\b/gi

一个单词连续出现的位置。

/(\w+):\/\/([^/:]+)(:\d)?([^# ])/

将一个URL解析为协议、域、端口及相对路径。

/^(?:Chapter\

Section) [1-9][0-9]{0,1}$/

定位章节的位置。

/[-a-z]/

A至z共26个字母再加一个-号。

/ter\b/

可匹配chapter,而不能匹配terminal。

/\Bapt/

可匹配chapter,而不能匹配aptitude。

/Windows(?=95 \

98 \

NT )/

可匹配Windows95或Windows98或WindowsNT,当找到一个匹配后,从Windows后面开始进行下一次的检索匹配。

/^\s*$/

匹配空行。

/\d{2}-\d{5}/

验证由两位数字、一个连字符再加 5 位数字组成的 ID 号。

/<\s(\S+)(\s[^>])?>[\s\S]<\s\/\1\s*>/

匹配 HTML 标记。

Exercise

email

代码语言:javascript
复制
import re# emailpatten = 'bill.gates@microsoft.com'r = r'^(\w*)\.?(\w*)@(\w+).(\w+)'print(re.match(r,patten).groups())r1 = r'(<\w+\s\w+>)\s*(\w*)\.?(\w*)@(\w+).(\w+)'patten1 = '<Tom Paris> tom@voyager.org'print(re.match(r1,patten).groups())# 别人的re_email = re.match(r'^(\w+\.\w+|\w+)(\@\w+\.com)$','bill.a@microsoft.com')print(re_email.groups())

参考资料

Runoob 30min 廖雪峰 官方文档 python正则 路人甲

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • what is Regular Expression
  • How
    • Simple Introduction
      • In Python
      • 字符类型
      • 示例
      • Exercise
        • email
        • 参考资料
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档