Python正则表达式学习

正则表达式:学习爬虫必不可少的技能。

python常用re模块来实现正则表达式,所以本文主要是学习re的记录。

一般正则表达式会使用“[]”来,当然还有预设的快捷字符:

d  匹配任何十进制数;它相当于类 [0-9]。
D  匹配任何非数字字符;它相当于类 [^0-9]。
s  匹配任何空白字符;它相当于类  [ tnrfv]。
S  匹配任何非空白字符;它相当于类 [^ tnrfv]。
w  匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
W  匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]。
.   匹配除了换行字符以为的任何字符。
^   匹配行首。在MULTLINE中,可以匹配每个换行。
$   匹配行尾。
A  只匹配字符串首。当不在 MULTILINE 模式,A 和 ^ 实际上是一样的。然而,在 MULTILINE 模式里它们是不同的;A 只是匹配字符串首,而 ^ 还可以匹配在换行符之后字符串的任何位置。
Z  只匹配字符串尾。
b  单词边界。这是个零宽界定符(zero-width assertions)只用以匹配单词的词首和词尾。单词被定义为一个字母数字序列,因此词尾就是用空白符或非字母数字符来标示的。
B  另一个零宽界定符(zero-width assertions),它正好同 b 相反,只在当前位置不在单词边界时匹配。

#一般都是使用“”,反斜杠作为开头。在匹配反斜杠时,应使用“r''”,否则你会头疼的。

*    匹配前一个字符任意次数,包含0,即不存在前一个字符
+    匹配前一个字符一次以上
?    匹配前一个字符一次或零次
{m,n}匹配前一个字符:至少有m个,至多n个          
#{0,}等同于*,{1,}等同于+,{0,1}等同于?;使用时建议使用*,+,?

#以上是通用正则表达式基本语法

re模块

  • compile()接受可选的标志参数,用来放置正则表达式语句。
  • match()决定RE是否在字符串刚开始的位置匹配
  • search()扫描字符串,找到这个RE匹配的位置
  • findall()找到RE匹配的所有子串,并把它们作为一个列表返回
  • finditer()找到RE匹配的所有子串,并把它们作为一个迭代器返回
  • group()返回被RE匹配的字符串
  • start()返回匹配开始的位置
  • end()返回匹配结束的位置
  • span()返回一个元组包含匹配(开始,结束)的位置

编译标志

  • 编译标志用来改变正则表达式运行方式
  • (全名,简写)
  • DOTALL,S 使 . ,匹配包含换行在内的所有字符
  • IGNORECASE,I 使匹配对大小写不敏感,即关闭大小写
  • LOCALE,L 做本地识别(locale-aware)匹配      影响 w, W, b, 和 B,这取决于当前的本地化设置。
  • locales 是 C 语言库中的一项功能,是用来为需要考虑不同语言的编程提供帮助的。举个例子,如果你正在处理法文文本,你想用 w+ 来匹配文字,但 w 只匹配字符类 [A-Za-z];它并不能匹配 "é" 或 "ç"。如果你的系统配置适当且本地化设置为法语,那么内部的 C 函数将告诉程序 "é" 也应该被认为是一个字母。当在编译正则表达式时使用 LOCALE 标志会得到用这些 C 函数来处理 w 后的编译对象;这会更慢,但也会象你希望的那样可以用 w+ 来匹配法文文本。
  • MULTILINE,M 多行匹配,影响 ^ 和 $
  • VERBOSE,X 能够使用 REs 的 verbose 状态,使之被组织的更清晰易懂

举个例子,这里有一个使用 re.VERBOSE 的 RE;看看读它轻松了多少?

#!python
charref = re.compile(r"""&[[]]		   # Start of a numeric entity reference|||here has wrong.i can't fix
(
[0-9]+[^0-9]      # Decimal form
| 0[0-7]+[^0-7]   # Octal form
| x[0-9a-fA-F]+[^0-9a-fA-F] # Hexadecimal form
)
""", re.VERBOSE)

没有 verbose 设置, RE 会看起来象这样:

#!python
charref = re.compile("&#([0-9]+[^0-9]"
"|0[0-7]+[^0-7]"
"|x[0-9a-fA-F]+[^0-9a-fA-F])")

re.match

  • 尝试从字符串开始匹配
  • 函数原型:re.match(pattern,string,flags)
  • pattern为正则表达式
  • string为要匹配的字符串
  • flags为RE模式

re.search

  • 尝试匹配整个字符串
  • 函数原型:re.search(pattern,string,flags)

区别 re.match只匹配字符串的开始,如果开始无法匹配,则失败,返回None;而re.search匹配整个字符串。

re.sub

  • 替换字符串中的匹配项
  • 函数原型:re.sub(pattern,repl,string,sount)
  • repl为替换后的字符串
  • sount为替换次数,默认为0,全部替换

re.split

  • 分割字符串
  • 函数原型:re.split(pattern,string,flags)
  • 用匹配到的字符串分割整个字符串

re.findall

  • 获取字符串中所有匹配的字符串

re.compile

  • 可以把正则表达式编译成一个正则表达式对象,用来提高效率,常用。
  • pattern不能直接实例化,必须使用re.compile()进行构造

例子

# encoding: UTF-8
import re
 
# 将正则表达式编译成Pattern对象
pattern = re.compile(r'hello')
 
# 使用Pattern匹配文本,获得匹配结果,无法匹配时将返回None
match = pattern.match('hello world!')
 
if match:
    # 使用Match获得分组信息
    print match.group()
 
### 输出 ###

# hello

#就到这儿了,目前没有学习实例,先记住匹配方法吧

我的开发学习规划

根据 《程序员练级攻略》 制定

因为很喜欢 酷壳 这个网站,很有技术性,所以要根据他的文章来学习。

  • 首先,学习python,要能够读懂基本代码,以及写出小脚本(为此我买了一本书,《Head First Python》,因为书里的教学方法我很喜欢)
  • 学习服务器基本设置 LAMP ,能够按需求改变配置文件。
  • 学习linux命令,能够在服务器上处理文件。
  • 精通Html,了解Html5
  • 学习CSS基本使用,能够做出div+css网站。
  • 认真学习javascript,能够读懂一般代码。能够做出一般网页特效,能够修改大部分开源代码,据为己有。
  • 能够做出符合标准的Html5+Css3+Javascript网站。
  • 学习PHP+mysql,能够做出基本留言板。
  • 深入学习Python,学习Django,web.py,做出满意的Etby.org网站。
  • 待续……

​开始了,一共10个任务,mission start。

我为什么使用阿里云服务器

最初搭建博客博客的时候,是王子哥帮我找的免费空间,虽然很好用,但总感觉用着不爽。

所以就想要买个自己的空间。是的,当初只想要空间。其实是我连vps是什么都不知道。

不得不说 aliyun 的广告做的非常好,虽然我已经忘了是如何知道阿里云云服务器的。但是,不可否认,良好的营销广告是非常有用的。知道阿里云之后,我就去搜索资料,然后看了那个介绍视频,好吧,我被打动了……

然后,就是痛苦的支付环节,最便宜的都有接近100元/月,跟网费差不多了。虽然很贵,但是,我一想:每个月挣钱没地方花啊,如何都随便花掉,那还不如买个服务器练习liunx命令,以及学习web开发啊!

当初我其实连vps是什么都不知道,所以当知道阿里云之后。我也去找过vps,但是没有找到适合我的,有些在国外的备受好评的服务商。我怕操作不方便,而且都是英语的话,估计会压力很大。

一咬牙,先买两个月试试再说。

这样就有了一台服务器。然后就是博客程序,我以前只接触过PHP开发的:wordpress。好吧,就用这个。wordpress的插件是世界上最全的,不论需要什么功能几乎都有,而且——博客,更重要的是文章、是思想、是有用的记录,这是一个博客的灵魂。如果一个博客都是转载的文章,或者全是没用的广告文的话,不论用什么程序来搭建,都没有意义。

阿里云服务器 其实和普通的linux电脑差不多,可以像操作自己电脑一样操作。vps应该都是这样的吧!我也通过它学习了很多,比如:apache基本设置、lamp的安装 等等 linux基础


使用了很久的 阿里云 ,唯一的缺点是 备案 。没错,就是网站备案。

你们或许会说,其实备案很快,而且阿里云的快捷备案很好、很实用。但是,在这个伟大的祖国,微小的地域歧视还是存在的。我是北方人,甘肃人。或许在南方的朋友有些还没听说过这个地方。

我所在的城市是 天水 —— 天河注水 ,名字很棒的城市,你一定没听过。虽然这里有非常著名的四大石窟之一的麦积山石窟

我们这儿对比国内一线城市是很落后,而且垄断什么的经常有。所以,备案就被电信垄断了。不是使用甘肃本省的服务器,无法享受接入——也就是所有外省的都不行。虽然可以促进本省的发展,但是,这是互联网啊,我们追寻的就是自由啊!GFW已经让人很痛苦了,现在连备案的自由都被剥夺了。

好吧,其实阿里云还是很好的,对于这些无法正常备案的地区,有一个域名白名单可以使用。这样我的危机也算是解决了,好感UP

除了这个,云盾的安全防护也很棒。行走在网络上,难免与别人发生冲突,如果博客被迫关闭,那对于我来说是无法接受的打击,虽然你可以反击,但是那所造成的伤痕永远也无法修复。所以我选择了阿里云,因为他带给了我所需要的一切,虽然有点贵,但是物超所值,贵的有价值。

所以,本博客会一直运行在阿里云上,直到世界末日,或者我发生意外,否则,永不怠机

因为这是我追逐梦想的脚步,未到终点,我无法停止,因为我还活着。

起步

服务器又悲剧了,其实是我太爱折腾了,乱搞搞坏了。

从网上找稳定空间的时候,发现了中学生博主联盟

好吧,现在社会怎么了?中学生都这么牛了,我当初上中学的时候还只会玩DNF呢!

T^T

备受打击,所以决定好好的建设博客了。一定要做的很好!