写代码时候,不管是爬虫,还是获取某些特定的资源,我们需要写正则表达式。 因为不常用,有些语法生疏。有时明明觉得自己的语法可以,可就是不行。

正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。 不管是python还是shell,都可以写正则。

正则表达式基本语法

头和尾

他们的作用是分别指出一个字符串的开始和结束。例子如下:

"^The":表示所有以"The"开始的字符串("There","The cat"等);

"of despair":表示开始和结尾都是"abc"的字符串——呵呵,只有"abc"自己了;

"notice":表示任何包含"notice"的字符串。

模糊匹配

'.'表示匹配任意的一个字符,相当于一个占位符号。

'',“没有或更多”

'+',“一次或更多”

'?',“没有或一次”

下面是几个例子:

"ab":表示一个字符串有一个a后面跟着零个或若干个b。("a", "ab", "abbb",……);

"ab+":表示一个字符串有一个a后面跟着至少一个b或者更多;

"ab?":表示一个字符串有一个a后面跟着零个或者一个b;

"a?b+$":表示在字符串的末尾有零个或一个a跟着一个或几个b。

分组和范围

() 是为了提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串。

[]是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字。[\s]表示空格或者号。

{}一般用来表示匹配的长度,比如 \s{3} 表示匹配三个空格,\s{1,3}表示匹配一到三个空格。

你也可以使用范围,用大括号括起,用以表示重复次数的范围。

"ab{2}":表示一个字符串有一个a跟着2个b("abb");

"ab{2,}":表示一个字符串有一个a跟着至少2个b;

"ab{3,5}":表示一个字符串有一个a跟着3到5个b。

区别:

圆括号()是组,主要应用在限制多选结构的范围/分组/捕获文本/环视/特殊模式处理

(abc|bcd|cde),表示这一段是abc、bcd、cde三者之一均可,顺序也必须一致。

方括号是单个匹配,字符集/排除字符集/命名字符集

示例:

1、[0-3],表示找到这一个位置上的字符只能是0到3这四个数字,与(abc|bcd|cde)的作用比较类似,但圆括号可以匹配多个连续的字符,而一对方括号只能匹配单个字符

2、[^0-3],表示找到这一个位置上的字符只能是除了0到3之外的所有字符

()内的内容表示的是一个子表达式,()本身不匹配任何东西,也不限制匹配任何东西,只是把括号内的内容作为同一个表达式来处理

[]表示匹配的字符在[]中,并且只能出现一次,并且特殊字符写在[]会被当成普通字符来匹配

选择,'¦',表示“或”操作

"hi¦hello":表示一个字符串里有"hi"或者"hello";

"(b¦cd)ef":表示"bef"或"cdef";

"(a¦b)*c":表示一串"a""b"混合的字符串后面跟一个"c";

为了逐字表达,你必须在"^.$()¦*+?{"这些字符前加上转移字符''。

请注意在方括号中,不需要转义字符。

元字符及其在正则表达式上下文中的行为:

\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。

^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。也匹配 '\n' 或 '\r' 之前的位置

{n} n 是一个非负整数,匹配确定的n 次。

{n,} n 是一个非负整数,至少匹配n 次。

{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。在逗号和两个数之间不能有空格。

? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。

. 匹配除 “\n” 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。

(pattern) 匹配pattern 并获取这一匹配。

(?:pattern) 匹配pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。

(?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。

(?!pattern) 负向预查,与(?=pattern)作用相反

x|y 匹配 x 或 y。

[xyz] 字符集合。

[^xyz] 负值字符集合。

[a-z] 字符范围,匹配指定范围内的任意字符。

[^a-z] 负值字符范围,匹配任何不在指定范围内的任意字符。

\b 匹配一个单词边界,也就是指单词和空格间的位置。

\B 匹配非单词边界。

\cx 匹配由x指明的控制字符。

\d 匹配一个数字字符。等价于 [0-9]。

\D 匹配一个非数字字符。等价于 [^0-9]。

\f 匹配一个换页符。等价于 \x0c 和 \cL。

\n 匹配一个换行符。等价于 \x0a 和 \cJ。

\r 匹配一个回车符。等价于 \x0d 和 \cM。

\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。

\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。

\t 匹配一个制表符。等价于 \x09 和 \cI。

\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。

\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。

\W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。

\xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。

\num 匹配 num,其中num是一个正整数。对所获取的匹配的引用。

太多了,大概记住就行了。

贪婪与非贪婪

属于贪婪模式的量词,也叫做匹配优先量词,包括:

“{m,n}”、“{m,}”、“?”、“”和“+”。

在一些使用NFA引擎的语言中,在匹配优先量词后加上“?”,即变成属于非贪婪模式的量词,也叫做忽略优先量词,包括:

“{m,n}?”、“{m,}?”、“??”、“?”和“+?”。

意思是说,跟人性一样,本性是贪婪的。但是,经过自己的反问,变得不贪婪了。

以下一些例子,来阐明这个

101000011000

1.* 结果:all, 贪婪的,所有匹配

1.? 结果:10,10,11, 非贪婪(最多一个,达到为止)

1.+ 结果:all, 贪婪的,所有匹配

1.*? 结果:非1 1 1 1 , 非贪婪的(点后面0个)

1.+? 结果:10,10,11,非贪婪的(点后面一个)

1.?+ no(不合法)

1.?* no (不合法)

1.*+ no(不合法)

1.+* no (不合法)

如果对自己写的表达式没有信心,可以找个工具检测以下。

网上很多工具,如:

检验: http://tool.oschina.net/regex/#

来检验一下,比如我们要匹配email地址

E-mail地址:我写的,\w+@\w+.\w+

虽然不是特别精确,但是基本功能能够满足了。

手机号码:^((\d2,3)|(\d{3}-))?13\d{9}$

[0-9]{11}

1[0-9]{10}

\d{11}

35、IP:

my: (\d+){1,3}.(\d+){1,3}.(\d+){1,3}.(\d+){1,3}

正则表达式也会有精度的。一般我们要把其特征点找出来,后面的就好办了。

更多精彩,请关注微信公众号:python爱好部落

python 正则 匹配任意字符串_python中正则匹配相关推荐

  1. python 正则 匹配任意字符串_Python正则表达式匹配字符串中的任意纯数字

    1.使用"\d+"匹配全数字 代码: import re zen = "Arizona 479, 501, 870. Carlifornia 209, 213, 650. ...

  2. python输入多行字符串_python中怎么输入多行字符串

    Python中输入多行字符串: 方法一:使用三引号>>> str1 = '''Le vent se lève, il faut tenter de vivre. 起风了,唯有努力生存 ...

  3. python post有随机字符串_Python 中的POST/GET包构建以及随机字符串的生成

    现在,我们来用Python,创建GET包和POST包. 至于有什么用处,大家慢慢体会. Python 中包含了大量的库,作为一门新兴的语言,Python 对HTTP有足够强大的支持. 现在,我们引入新 ...

  4. python for i in 字符串_python中for in的用法

    for in 说明:也是循环结构的一种,经常用于遍历字符串.列表,元组,字典等 格式: for x in y: 循环体 执行流程:x依次表示y中的一个元素,遍历完所有元素循环结束. 例1:遍历字符串 ...

  5. python让用户输入字符串_Python中接收用户的输入

    一.如何去接收用户的输入?使用函数 input() 函数 input() 让程序暂停运行,等待用户输入一些文本,获取用户的输入后,Python将其存储到一个变量中,以方便后期使用. name = in ...

  6. python将集合变成字符串_python中如何把list变成字符串

    python中如何把list变成字符串?方法如下: python中list可以直接转字符串,例如:data = ["hello", "world"] print ...

  7. python输出数字和字符串_Python中的数值和字符串

    一.Python中的数值 python中的数值分为三类:整型.浮点型和复数 1.整型: python3的整型支持各种类型的整数: python的整数值有4种表达形式: a.十进制形式,最普通的整数就是 ...

  8. python将数字转字符串_python中如何将数字转字符串

    python数字转字符串的实现方法:1.使用格式化字符串,语句如"tt=322 tem='%d' %tt":2.通过"str(5)"方法实现转换. 推荐:< ...

  9. python正则_python中正则匹配

    写代码时候,不管是爬虫,还是获取某些特定的资源,我们需要写正则表达式. 因为不常用,有些语法生疏.有时明明觉得自己的语法可以,可就是不行. 正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之 ...

最新文章

  1. Apache HBase快照介绍
  2. maven学习笔记之IDEA+Maven+Jetty运行一个简单的web项目
  3. oracle 9i乱码,oracle 9i sql*plus worksheet乱码问题
  4. 多线程知识梳理(2) - 并发编程的艺术笔记
  5. Algorithm:递归思想及实例分析
  6. w10系统 怎么快捷搜索服务器,w10系统怎么远程连接服务器
  7. JDK8的下载和安装,以及配置环境变量
  8. RGB配色表,CMYK配色表
  9. 显微镜下的大明内容_《显微镜下的大明》读后感
  10. 困扰了很久的ubuntu下智能拼音输入法
  11. ios 渐变透明背景_PPT设计的总是太单调,不如换个背景试试,超精彩!
  12. 微信小程序:喝酒娱乐小游戏助力神器
  13. 让OpenAi给我写个JS的set对象的笔记和快速去重方法
  14. 区块链食品安全(区块链食品安全溯源系统痛点)
  15. Lecture 12: Iterated Expectations; Sum of a Random Number of Random Variables
  16. 程序员崩溃了!年终奖怎么说黄就黄?
  17. html标签转换成json失败,在html中收到带有html标签的json失败PHP
  18. 越狱第三季第一集 在线免费观看
  19. 从程序员之死看 IT 人士如何摆脱低情商诅咒——转载自CSDN官方博客
  20. Javascript中的8种常见数据结构(建议收藏)

热门文章

  1. Single Yuanz(单一原则)
  2. android 添加子view,如何在Android中向ImageView添加子视图
  3. 模数转换器ADC的常用术语和主要技术s指标(完)
  4. 常用计算机辅助审计技术,常用的计算机辅助审计技术
  5. Wifidog扫盲篇
  6. 【易开嵌入式】rt-thread+stm32f407+nandflash,实现RL-FLASHFS文件系统移植
  7. reactHooks中使用events全局通信
  8. Android程序员二本出身、逆袭网易、一路孤独、一路狂欢,源码解读-别再说你不知道HashMap原理
  9. OA之我的会议(会议排座送审)
  10. 【微信小程序-初级实战】弹出海报/广告效果实现