python中关于正则表达式三
2015年8月14日
11:10
7.2正则表达式操作
正则表达式使用反斜杠字符'\'来暗示一些特殊的形式或者允许特殊的字符使用但是没有调用它们特殊的意思。在字符串常量中的相同目标的字符的python中的用法也是有冲突的,例如,为了匹配常量反斜杠,一个可能的是必须写'\\\\'作为模式字符串,因为正则表达式必须是\\,并且每个反斜杠必须是被镶嵌在有规律的python字符串常量中\\
一个对于使用python的原始字符串符号的正则表达式用法模式的解决办法是,反斜杠不会被处理用任何特殊方式用字符串常量前缀'r'。所以r'\n'就是一个两个字符的包含'\'和'n',当'\n'表示一个字符串的包含一个新行。通常模式将会在python代码中表示用这个原始的字符串标记。
我们需要注意大多数正则表达式操作符是可用的在模块水平的函数和正则对象方法中。函数是快捷方式不要求你首先完成正则对象,但是会遗漏一些微调的元素
7.2.1正则表达式语法
一个正则表达式(或者RE)指定一个可以和它匹配的字符串集合。在这个模块中的函数让你检查是否一个特别字符串会匹配被给的正则表达式(或者是否一个被给的正则表达式会匹配一个特别的字符串,这个可以归结为同样的事情)
正则表达式可以被串联为一种新的表达式;如果A和B都是正则表达式,那么AB也是一个正则表达式。通常,如果一个字符串p匹配A而且另一个字符串q匹配B,那么字符串pq将会匹配AB。这表示除非A或者B包含滴游戏操作;边界条件在A和B,或者有数字组的参考。从而,复杂的表达式可以容易地构造从更简单原始的表达式像一个描述这里。详细来看这个理论和正则表达式的实现,请教参考书在上面的,或者几乎任何的文本关于编译的构造。
下面是一个简单的正则表达式解释。为了更远的信息和一个更温和的描述,咨询正则表达式HOWTO.
正则表达式可以包含特指的和平凡的字符。大多数平凡的字符,如'A','a'或者'0',是最简单的正则表达式,它们简单地匹配它们自己。你能串联平凡的字符,所以最后的匹配字符'last'.(在本节的其余部分,我们在这种特殊风格来写RE,通常没有引用,而且字符可以被匹配在这个简单的引用中。
一些字符,像'|'或者'(',是特指的。特别的字符代表着普通字符的一类,或者影响正则表达式环绕它们被干扰。正则表达式的模式字符串可能不会包含null字节,但是可以空null字节使用\number 标识,例如 '\x00'
这些特殊的字符有:
'.' 点,在默认的模式中,这个匹配任何字符除了新的一行。如果DOTALL 标记已经被指定,这个匹配任何字符包括新的一行。
'^' ^插入符号,匹配字符串的开始,而且在MULTILINE(多行)模式的新的一行后也立即匹配
'$' 匹配字符串的结束或者仅仅在字符串末尾的新行开始前,并且在MULTILINE(多行)模式的新的一行行开始前也匹配。foo 匹配 'foo' 和 'foorbar',当正则表达式foo$匹配仅仅只能是'foo'。更有兴趣的是,搜索foo.*在 'foo1\nfoo2\n'匹配'foo2'正常,但是'foo1'在多行模式中是正常的。搜索一个简单的 $ 在'foo\n'将会发现两个(空的)匹配,一个就是在新的一行开始前,而另一个就是在字符串的末尾。
import re
pattern=re.compile('foo.$')
print re.findall(pattern,'foo1\nfoo2\n')
'*' 造成一个结果让RE去匹配0或者更多的重复在RE表达式,尽可能重复 。 ab*就是匹配'a' ,'ab',或者'a'后面跟随很多次的'b' 'a'后面跟随很多'b'这个要注意
'+' 造成一个结果RE去匹配1或者更多重复次数在RE表达式之前。 ab+ 就是匹配'a'后面跟随许多非0次的'b',他将不再匹配仅仅'a'
'?' 造成一个结果就是让RE去匹配0或者1次重复在RE表达式中。 ab?就是匹配
'a'或者'ab'
*?,+?,?? 这个'*','+'和'?'限定是所有的贪婪,它们尽可能地匹配文本。有时候这个行为不是渴望想得到的;如果RE表达式<.*>是竞争匹配'<H1>title</H1>',那么将会匹配整个字符串,而不仅仅是'<H1>'。添加'?'在这个限定符之后会让它执行匹配用非贪婪模式或者最小式样,在尽可能少的字符串会被匹配。用.*? 在先前的表达式中将会匹配仅仅<H1>
{m} 特别地这个m 复制了之前的RE应该是匹配,更少的匹配让整个RE表达式不去匹配。例如,a{6}将会精准匹配6个'a'字符,而不是5个
{m,n} 让产生结果导致RE表达式去匹配m到n个重复次数对于准备好的RE,尝试着去匹配尽可能的次数。例如,a{3,5}将会匹配从3到5次'a'字符。省略m次会有一个更小的边界,比如0.如果忽略n特指一个无限大的边界。作为一个例子,a{4,}b那么会 匹配 aaaab或者一千次'a'字符然后后面跟着一个b,而不是aaab。 这个逗号不能忽略或者修改,这将会混淆之前描述的内容。
{m,n}? 让产生结果导致RE去匹配从m到n次重复的表达式,尝试着去匹配尽可能少的次数。这是非贪婪的版本对之前之前的限定词。例如,在一个6次的字符串'aaaaaa',a{3,5}将会匹配 5'a'字符,然而a{3,5}?将仅仅匹配3个字符串。
'\' 转义符特指的字符(允许你去匹配像* ,?等等这些字符),或者一串特别的符号,尤其下述被讨论的序列。如果你不用一个原始的字符串去表示模式,记得python也在字符串序列中用反斜杠作为一个转义符;如果这个专业符序列不能识别被python的解析器,那么反斜杠和字序列是被包括在产生字符串中。然而,如果python识别了产生的字符串,反斜杠应该被重复两次。这是复杂和困难的去理解,所以强烈推荐用原始字符串对于所有而不是简单的表达式。
python中关于正则表达式三的更多相关文章
- 在python中使用正则表达式(三)
这里主要说一下贪婪匹配和非贪婪匹配 贪婪匹配:匹配尽可能多的字符: 非贪婪匹配:匹配尽可能少的字符 python的正则匹配默认是贪婪匹配 例子: >>> re.match(r'^ ...
- 在Python中使用正则表达式同时匹配邮箱和电话并进行简单的分类
在Python使用正则表达式需要使用re(regular exprssion)模块,使用正则表达式的难点就在于如何写好p=re.compile(r' 正则表达式')的内容. 下面是在Python中使用 ...
- python模块 re模块与python中运用正则表达式的特点 模块知识详解
1.re模块和基础方法 2.在python中使用正则表达式的特点和问题 3.使用正则表达式的技巧 4.简单爬虫例子 一.re模块 模块引入; import re 相关知识: 1.查找: (1)find ...
- Python学习-37.Python中的正则表达式
作为一门现代语言,正则表达式是必不可缺的,在Python中,正则表达式位于re模块. import re 这里不说正则表达式怎样去匹配,例如\d代表数字,^代表开头(也代表非,例如^a-z则不匹配任何 ...
- [Python]网络爬虫(七):Python中的正则表达式教程
转自:http://blog.csdn.net/pleasecallmewhy/article/details/8929576#t4 接下来准备用糗百做一个爬虫的小例子. 但是在这之前,先详细的整理一 ...
- [Python]网络爬虫(七):Python中的正则表达式教程(转)
接下来准备用糗百做一个爬虫的小例子. 但是在这之前,先详细的整理一下Python中的正则表达式的相关内容. 正则表达式在Python爬虫中的作用就像是老师点名时用的花名册一样,是必不可少的神兵利器. ...
- Python::re 模块 -- 在Python中使用正则表达式
前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...
- Python学习-38.Python中的正则表达式(二)
在Python中,正则表达式还有较其他编程语言有特色的地方.那就是支持松散正则表达式了. 在某些情况,正则表达式会写得十分的长,这时候,维护就成问题了.而松散正则表达式就是解决这一问题的办法. 用上一 ...
- 在python中使用正则表达式(转载)
https://www.cnblogs.com/hanmk/p/9143514.html 在python中使用正则表达式(一) 在python中通过内置的re库来使用正则表达式,它提供了所有正则表 ...
随机推荐
- seleniumRC启动及浏览器实例配置
一.firefox浏览器实例配置 1.启动用户配置文件管理器 重要:在启动用户配置文件管理器之前,Firefox必须完全关闭. 1)按 support.cdn.mozilla.net/medi ...
- mysql 资料总结 长期更新
http://blog.csdn.net/ww1982_0_0_0/article/details/9169613 引入employess
- 【前端】CSS3实现弹出效果
36氪这个网站上的登录框弹出的时候挺帅气的,想知道它是怎么做的 .. 今天通过问新爷再加上自己琢磨琢磨写出一个小小Demo - 上代码 <!DOCTYPE html> <html&g ...
- Spring笔记(三)AOP前篇之动态代理
AOP思想是将程序中的业务代码与服务代码进行分离,在运行时进行结合.比较强调程序的层次结构,是一种面向切面的编程.而在AOP实现的底层主要用到了动态代理,而动态代理又分为JDK动态代理和CGLIB动态 ...
- java 小结2 多态问题和容器介绍
面向对象这个东西,其实我们一直是不是都没有感觉到自己在用,以后我一定要用用.以前学c#时候认真的看过一次,最近一直研究java.随便再看看. 多态问题: 在java中多态分为(1)编译时多态和(2)运 ...
- codeforces 432D Prefixes and Suffixes
由于包含了前缀与后缀,很容易想到用KMP去算前缀与后缀的公共缀.另外要计算某个后缀在整个串中出现的次数,由于后缀自动机是比较容易求的,然后就直接上后缀自动机了.先分别用KMP算法与后缀自动机跑一遍,然 ...
- A Tour of Go Multiple results
A function can return any number of results. This function returns two strings. package main import ...
- poj3101
不难,结果: 程序: import java.math.*; import java.util.*; public class Main { public static void main(Strin ...
- android 4.3源码编译
jianguoliao@jianguoliao-Lenovo-IdeaPad-Y470:~/WORKING_DIRECTORY$ source build/envsetup.sh including ...
- 三期_day12_其它+jetty的使用
1.大致总结 行程管理和留言反馈和前面的思路差点儿相同,这里就不多啰嗦了.经过十几天的写写停停.有了一个初步的进展了,再往下写也没有啥欲望了.还是研究下android和server,设计模式和网络这些 ...