<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kingdict - ECommerce Observer &#187; Python</title>
	<atom:link href="http://www.kingdict.net/i/category/python/feed" rel="self" type="application/rss+xml" />
	<link>http://www.kingdict.net/i</link>
	<description>To Make Speaking Easier across world</description>
	<lastBuildDate>Sat, 25 Jun 2011 10:18:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>Python WEB 客户端编程</title>
		<link>http://www.kingdict.net/i/2010/03/python-web-client-program</link>
		<comments>http://www.kingdict.net/i/2010/03/python-web-client-program#comments</comments>
		<pubDate>Wed, 31 Mar 2010 14:42:17 +0000</pubDate>
		<dc:creator>kingdict</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.kingdict.net/i/?p=266</guid>
		<description><![CDATA[HTTP基于请求和回应（requests &#038;responses ）-客户端制造请求服务器返回回应。urlib2用代表了你正在请求的HTTP request的Request对象反映了这些。调用urlopen函数对请求的url返回一个respons对象。这个respons是一个像file的对象，这意味着你能用.read()函数操作这个respon对象： req = urllib2.Request(&#8216;http://www.voidspace.org.uk&#8217;) response = urllib2.urlopen(req) the_page = response.read() url = &#8216;http://www.someserver.com/cgi-bin/register.cgi&#8217; user_agent = &#8216;Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)&#8217; values = {&#8216;name&#8217; : &#8216;Michael Foord&#8217;, &#8216;location&#8217; : &#8216;Northampton&#8217;, &#8216;language&#8217; : &#8216;Python&#8217; } headers = { &#8216;User-Agent&#8217; : user_agent } data = urllib.urlencode(values) req = urllib2.Request(url, data, headers) response = urllib2.urlopen(req) [...]]]></description>
			<content:encoded><![CDATA[<p>HTTP基于请求和回应（requests &#038;responses ）-客户端制造请求服务器返回回应。urlib2用代表了你正在请求的HTTP request的Request对象反映了这些。调用urlopen函数对请求的url返回一个respons对象。这个respons是一个像file的对象，这意味着你能用.read()函数操作这个respon对象：<br />
req = urllib2.Request(&#8216;http://www.voidspace.org.uk&#8217;)<br />
response = urllib2.urlopen(req)<br />
the_page = response.read()</p>
<p>url = &#8216;http://www.someserver.com/cgi-bin/register.cgi&#8217;<br />
user_agent = &#8216;Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)&#8217;<br />
values = {&#8216;name&#8217; : &#8216;Michael Foord&#8217;,<br />
&#8216;location&#8217; : &#8216;Northampton&#8217;,<br />
&#8216;language&#8217; : &#8216;Python&#8217; }<br />
headers = { &#8216;User-Agent&#8217; : user_agent }</p>
<p>data = urllib.urlencode(values)<br />
req = urllib2.Request(url, data, headers)<br />
response = urllib2.urlopen(req)<br />
the_page = response.read()</p>
<p>当一个错误( HTTPError)被抛出的时候，服务器返回一个HTTP错误代码和一个错误页。你可以使用返回的HTTP错误示例。这意味着它不但具有code属性，而且同时具有read，geturl，和info，methods属性。>>> req = urllib2.Request(&#8216;http://www.python.org/fish.html&#8217;)>>> try:>>> urllib2.urlopen(req)>>> except URLError, e:>>> print e.code>>> print e.read()>>>404&#8230;&#8230; etc</p>
<p>from urllib2 import Request, urlopen, URLError<br />
req = Request(someurl)<br />
try:<br />
response = urlopen(req)<br />
except URLError, e:          同时也会涵括HTTPError<br />
if hasattr(e, &#8216;reason&#8217;):<br />
print &#8216;We failed to reach a server.&#8217;<br />
print &#8216;Reason: &#8216;, e.reason<br />
elif hasattr(e, &#8216;code&#8217;):<br />
print &#8216;The server couldn\&#8217;t fulfill the request.&#8217;<br />
print &#8216;Error code: &#8216;, e.code<br />
else:<br />
# everything is fine</p>
<p>urlopen返回的response（或者HTTP错误实例）有两个有用的方法：info和geturl。<br />
geturl–它返回被获取网页的真正的url。<br />
info–它返回一个像字典的对象来描述获取的网页，尤其是服务器发送的头。它现在一般是httplib.HTTPMessage的一个实例。</p>
<p>Openers 和Handlers<br />
当你获取一个URL时，你使用一个opener（一个可能以一个比较迷糊名字命名的实例–urllib2.OpenerDirector）。正常情况下<br />
我们一直使用默认的opener，通过urlopen，但你也可以创建自定义的openers。opener使用操作器（handlers）。所有的重活都交给这些handlers来做。每一个handler知道<br />
怎么打开url以一种独特的url协议（http，ftp等等），或者怎么处理打开url的某些方面，如，HTTP重定向，或者HTTP cookie。</p>
<p>你将会创建openers如果你想要用安装特别的handlers获取url，例如，获取一个处理cookie的opener，或者一个不处理重定向的opener。</p>
<p>枚举一个OpenerDirector，然后多次调用.add_handler(some_handler_instance)来创建一个opener。<br />
或者，你可以用build_opener，这是一个很方便的创建opener对象的函数，它只有一个函数调用。build_opener默认会加入许多<br />
handlers，但是提供了一个快速的方法添加更多东西和/或使默认的handler失效。<br />
其他你想要的handlers能够处理代理，authentication和其他平常但是又有些特殊的情况。<br />
install_opener能被用于创建一个opener对象，（全局）默认的opener。这意味着调用urlopen将会用到你刚安装的opener。<br />
opener对象有一个open方法，它可以被直接调用来获取url以一种和urlopen函数同样的方式：没有必要调用install_opener，除非是为了方便。</p>
<p>默认opener有对普通情况的操作器 （handlers）- ProxyHandler, UnknownHandler, HTTPHandler, HTTPDefaultErrorHandler, HTTPRedirectHandler, FTPHandler, FileHandler, HTTPErrorProcessor.</p>
<p>import ClientCookie<br />
cookies = ClientCookie.CookieJar()<br />
opener = ClientCookie.build_opener(ClientCookie.HTTPCookieProcessor(cookies))<br />
opener.addheaders = [("User-agent", "Mozilla/5.0 (compatible; MyProgram/0.1)"),<br />
                     ("From", "responsible.person@example.com")]<br />
ClientCookie.install_opener(opener)<br />
r = ClientCookie.urlopen(&#8220;http://acme.com/&#8221;)</p>
<p>import ClientCookie<br />
cj = ClientCookie.LWPCookieJar()<br />
opener = ClientCookie.build_opener(ClientCookie.HTTPCookieProcessor(cj))<br />
ClientCookie.install_opener(opener)<br />
r = ClientCookie.urlopen(&#8220;http://foobar.com/&#8221;)<br />
cj.save(&#8220;/some/file&#8221;, ignore_discard=True, ignore_expires=True)</p>
<p>import os, ClientCookie<br />
cookies = ClientCookie.MozillaCookieJar()<br />
cookies.load(os.path.join(os.environ["HOME"], &#8220;/.netscape/cookies.txt&#8221;))<br />
# see also the save and revert methods</p>
<p>import ClientCookie<br />
cj = ClientCookie.MSIECookieJar(delayload=True)<br />
cj.load_from_registry()  # finds cookie index file from registry</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kingdict.net/i/2010/03/python-web-client-program/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python处理中文知识</title>
		<link>http://www.kingdict.net/i/2010/03/python-chinese</link>
		<comments>http://www.kingdict.net/i/2010/03/python-chinese#comments</comments>
		<pubDate>Wed, 31 Mar 2010 07:53:46 +0000</pubDate>
		<dc:creator>kingdict</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.kingdict.net/i/?p=259</guid>
		<description><![CDATA[Python will default to ASCII as standard encoding if no other encoding hints are given. # coding= # -*- coding: -*- 中文 coding:cp936 文件中指定的编码要和实际相符合，否则的话python会报错 Python&#8217;s tokenizer/compiler combo will need to be updated to work as follows: 1. read the file 2. decode it into Unicode assuming a fixed per-file encoding 3. convert it into a [...]]]></description>
			<content:encoded><![CDATA[<p>Python will default to ASCII as standard encoding if no other encoding hints are given.<br />
# coding=<encoding name><br />
# -*- coding: <encoding name> -*-<br />
中文 coding:cp936<br />
文件中指定的编码要和实际相符合，否则的话python会报错</p>
<p>Python&#8217;s tokenizer/compiler combo will need to be updated to<br />
       work as follows:</p>
<p>       1. read the file</p>
<p>       2. decode it into Unicode assuming a fixed per-file encoding</p>
<p>       3. convert it into a UTF-8 byte string</p>
<p>       4. tokenize the UTF-8 content</p>
<p>       5. compile it, creating Unicode objects from the given Unicode data<br />
          and creating string objects from the Unicode literal data<br />
          by first reencoding the UTF-8 data into 8-bit string data<br />
          using the given file encoding</p>
<p>字符串在Python内部的表示是unicode编码，因此，在做编码转换时，通常需要以unicode作为中间编码，即先将其他编码的字符串解码（decode）成unicode，再从unicode编码（encode）成另一种编码。<br />
decode的作用是将其他编码的字符串转换成unicode编码，如str1.decode(&#8216;gb2312&#8242;)，表示将gb2312编码的字符串str1转换成unicode编码。 </p>
<p>encode的作用是将unicode编码转换成其他编码的字符串，如str2.encode(&#8216;gb2312&#8242;)，表示将unicode编码的字符串str2转换成gb2312编码。 </p>
<p>因此，转码的时候一定要先搞明白，字符串str是什么编码，然后decode成unicode，然后再encode成其他编码</p>
<p>代码中字符串的默认编码与代码文件本身的编码一致。 </p>
<p>如：s=&#8217;中文&#8217;</p>
<p>如果是在utf8的文件中，该字符串就是utf8编码，如果是在gb2312的文件中，则其编码为gb2312。</p>
<p>如果字符串是这样定义：s=u&#8217;中文&#8217; </p>
<p>则该字符串的编码就被指定为unicode了，即python的内部编码，而与代码文件本身的编码无关。</p>
<p>如果一个字符串已经是unicode了，再进行解码则将出错，因此通常要对其编码方式是否为unicode进行判断：</p>
<p>isinstance(s, unicode)  #用来判断是否为unicode </p>
<p>用非unicode编码形式的str来encode会报错<br />
unicode(str,&#8217;gb2312&#8242;)与str.decode(&#8216;gb2312&#8242;)是一样的，都是将gb2312编码的str转为unicode编码<br />
如何获得系统的默认编码？<br />
import sys<br />
print sys.getdefaultencoding()  </p>
<p>#!/usr/bin/env python<br />
#coding=utf-8<br />
s=&#8221;中文&#8221;  </p>
<p>if isinstance(s, unicode):<br />
#s=u&#8221;中文&#8221;<br />
    print s.encode(&#8216;gb2312&#8242;)<br />
else:<br />
#s=&#8221;中文&#8221;<br />
    print s.decode(&#8216;utf-8&#8242;).encode(&#8216;gb2312&#8242;)  </p>
<p>在window下面用记事本编辑文件的时候，如果保存为UNICODE或UTF-8，分别会在文件的开头加上两个字节“\xFF\xFE”和三个字节“\xEF\xBB\xBF”。<br />
Python中有两种默认的字符串：str和unicode。<br />
控制台，中文字符的编码是GBK<br />
在Python中，“str”对象就是一个字节数组，至于里面的内容是不是一个合法的字符串，以及这个字符串采用什么编码（gbk, utf-8, unicode）都不重要。这些内容需要用户自己记录和判断。这些的限制也同样适用于“unicode”对象。要记住“unicode”对象中的内容可绝对不一定就是合法的unicode字符串，我们很快就会看到这种情况。<br />
在windows的控制台上，支持gbk编码的str对象和unicode编码的unicode对象。<br />
windows下的IDLE SHELL中，对于不使用“u”作标识的字符串，IDLE把其中的中文字符进行GBK编码。但是对于使用“u”的unicode字符串，IDLE居然一样是用了GBK编码，不同的是，这时候每一个字符都是unicode（对象）字符！！此时len(“中文&#8221;) = 4。</p>
<p>参考:http://www.sqlite.com.cn/MySqlite/11/395.Html</p>
<p>http://blog.csdn.net/lxdcyh/archive/2009/03/23/4018054.aspx</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kingdict.net/i/2010/03/python-chinese/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>加速工作的Python知识点</title>
		<link>http://www.kingdict.net/i/2010/03/%e5%8a%a0%e9%80%9f%e5%b7%a5%e4%bd%9c%e7%9a%84python%e7%9f%a5%e8%af%86%e7%82%b9</link>
		<comments>http://www.kingdict.net/i/2010/03/%e5%8a%a0%e9%80%9f%e5%b7%a5%e4%bd%9c%e7%9a%84python%e7%9f%a5%e8%af%86%e7%82%b9#comments</comments>
		<pubDate>Tue, 30 Mar 2010 03:22:43 +0000</pubDate>
		<dc:creator>kingdict</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.kingdict.net/i/?p=255</guid>
		<description><![CDATA[import types if type(a)==types.IntType: print &#8220;Int type&#8221; if isinstance(data, int): &#8230;             print &#8216;int&#8217; &#8230;     elif isinstance(data, str): &#8230;             print &#8216;str&#8217; python build-in functions getattr(object, name[, default]) hasattr(object, name) =========================== 捕获所有异常 try a=b b=c except Exception,ex: print Exception,&#8217;:',ex except: all unknown exception [...]]]></description>
			<content:encoded><![CDATA[<p><span>import types </span><br />
<span>if type(a)==types.IntType: </span><br />
<span>print &#8220;Int type&#8221; </span></p>
<p><span>if isinstance(data, int): </span><br />
<span>&#8230;             print &#8216;int&#8217; </span><br />
<span>&#8230;     elif isinstance(data, str): </span><br />
<span>&#8230;             print &#8216;str&#8217; </span></p>
<p>python build-in functions<br />
getattr(object, name[, default])<br />
hasattr(object, name)<br />
===========================</p>
<p>捕获所有异常</p>
<p>try<br />
a=b<br />
b=c<br />
except Exception,ex:<br />
print Exception,&#8217;:',ex<br />
except:<br />
all unknown exception<br />
else:<br />
nothing happened</p>
<p>try:<br />
&#8230;<br />
finally:<br />
&#8230;</p>
<p>数组操作</p>
<p>x代表数组中的元素，i代表位置</p>
<p>a) append(x) 把元素x添加到数组的尾部</p>
<p>b) insert(i,x) 把元素x 插入到位置i</p>
<p>c) remove(x) 删除第一个元素x</p>
<p>d) pop(i) 删除第i个元素，并返回这个元素。若调用pop()则删除最后一个元素</p>
<p>e) index(x) 返回数组中第一个值为x的位置。如果没有匹配的元素会抛出一个错误</p>
<p>f) count(x) 返回x在数组中出现的次数</p>
<p>g) sort() 对数组中的元素进行排序</p>
<p>h) reverse() 对数组中的元素用倒序排序</p>
<p>&#8217;1,,2&#8242;.split(&#8216;,&#8217;) returns ['1', '', '2'])<br />
&#8217;1&lt;&gt;2&lt;&gt;3&#8242;.split(&#8216;&lt;&gt;&#8217;) returns ['1', '2', '3']</p>
<p>s = &#8216;hEllo pYthon&#8217;<br />
print s.upper()<br />
print s.lower()<br />
print s.capitalize()<br />
print s.title()</p>
<p>追加制定长度的字符串<br />
    str2 += str1[0:n]<br />
str.replace(&#8216;old&#8217;,'new&#8217;) </p>
<p>list1=['a','p','p','p','l','e']<br />
    str = &#8221;<br />
    print str.join(list1)<br />
    print str.join(list1[2:4]) </p>
<p> &#8216;  abc&#8217;.lstrip()<br />
    &#8216;abc  &#8216;.rstrip()<br />
    &#8216; abc &#8216;.strip() </p>
<p>查找字符串<br />
    string.find(sub)<br />
    string.index(sub)<br />
    string.rfind(sub)<br />
    string,rindex(sub) </p>
<p>cmp(str1,str2)<br />
    cmp(str1.upper(),str2.upper())</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kingdict.net/i/2010/03/%e5%8a%a0%e9%80%9f%e5%b7%a5%e4%bd%9c%e7%9a%84python%e7%9f%a5%e8%af%86%e7%82%b9/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>常用正则表达式-Python</title>
		<link>http://www.kingdict.net/i/2010/03/%e5%b8%b8%e7%94%a8%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f-python</link>
		<comments>http://www.kingdict.net/i/2010/03/%e5%b8%b8%e7%94%a8%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f-python#comments</comments>
		<pubDate>Fri, 12 Mar 2010 12:20:11 +0000</pubDate>
		<dc:creator>kingdict</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.kingdict.net/i/?p=249</guid>
		<description><![CDATA[http://www.96yx.com/tool/ASC2.htm ascii 码表查询 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 代码/语法 说明 * 重复零次或更多次 + 重复一次或更多次 ? 重复零次或一次 {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复n到m次 [aeiou]就匹配任何一个英文元音字母，[.?!]匹配标点符号(.或?或!)。 [0-9]代表的含意与\d就是完全一致的：一位数字；同理[a-z0-9A-Z_]也完全等同于\w \ba\w*\b匹配以字母a开头的单词——先是某个单词开始处(\b)，然后是字母a,然后是任意数量的字母或数字(\w*)，最后是单词结束处(\b)。 \d+匹配1个或更多连续的数字。这里的+是和*类似的元字符，不同的是*匹配重复任意次(可能是0次)，而+则匹配重复1次或更多次。 \b\w{6}\b 匹配刚好6个字符的单词。 反义 有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外，其它任意字符都行的情况，这时需要用到反义： 表3.常用的反义代码 代码/语法 说明 \W 匹配任意不是字母，数字，下划线，汉字的字符 \S 匹配任意不是空白符的字符 \D 匹配任意非数字的字符 \B 匹配不是单词开头或结束的位置 [^x] 匹配除了x以外的任意字符 [^aeiou] 匹配除了aeiou这几个字母以外的任意字符 例子：\S+匹配不包含空白符的字符串。 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.96yx.com/tool/ASC2.htm ">http://www.96yx.com/tool/ASC2.htm </a> ascii 码表查询</p>
<p>. 匹配除换行符以外的任意字符<br />
\w 匹配字母或数字或下划线或汉字<br />
\s 匹配任意的空白符<br />
\d 匹配数字<br />
\b 匹配单词的开始或结束<br />
^ 匹配字符串的开始<br />
$ 匹配字符串的结束</p>
<p>代码/语法 说明<br />
* 重复零次或更多次<br />
+ 重复一次或更多次<br />
? 重复零次或一次<br />
{n} 重复n次<br />
{n,} 重复n次或更多次<br />
{n,m} 重复n到m次</p>
<p>[aeiou]就匹配任何一个英文元音字母，[.?!]匹配标点符号(.或?或!)。<br />
[0-9]代表的含意与\d就是完全一致的：一位数字；同理[a-z0-9A-Z_]也完全等同于\w</p>
<p>\ba\w*\b匹配以字母a开头的单词——先是某个单词开始处(\b)，然后是字母a,然后是任意数量的字母或数字(\w*)，最后是单词结束处(\b)。</p>
<p>\d+匹配1个或更多连续的数字。这里的+是和*类似的元字符，不同的是*匹配重复任意次(可能是0次)，而+则匹配重复1次或更多次。</p>
<p>\b\w{6}\b 匹配刚好6个字符的单词。</p>
<p>反义<br />
有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外，其它任意字符都行的情况，这时需要用到反义：</p>
<p>表3.常用的反义代码 代码/语法 说明<br />
\W 匹配任意不是字母，数字，下划线，汉字的字符<br />
\S 匹配任意不是空白符的字符<br />
\D 匹配任意非数字的字符<br />
\B 匹配不是单词开头或结束的位置<br />
[^x] 匹配除了x以外的任意字符<br />
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符</p>
<p>例子：\S+匹配不包含空白符的字符串。</p>
<p>]+&gt;匹配用尖括号括起来的以a开头的字符串。</p>
<p>常用的处理选项 名称 说明<br />
IgnoreCase(忽略大小写) 匹配时不区分大小写。<br />
Multiline(多行模式) 更改^和$的含义，使它们分别在任意一行的行首和行尾匹配，而不仅仅在整个字符串的开头和结尾匹配。(在此模式下,$的精确含意是:匹配\n之前的位置以及字符串结束前的位置.)<br />
Singleline(单行模式) 更改.的含义，使它与每一个字符匹配（包括换行符\n）。<br />
IgnorePatternWhitespace(忽略空白) 忽略表达式中的非转义空白并启用由#标记的注释。<br />
ExplicitCapture(显式捕获) 仅捕获已被显式命名的组。</p>
<p>尚未详细讨论的语法 代码/语法 说明<br />
\a 报警字符(打印它的效果是电脑嘀一声)<br />
\b 通常是单词分界位置，但如果在字符类里使用代表退格<br />
\t 制表符，Tab<br />
\r 回车<br />
\v 竖向制表符<br />
\f 换页符<br />
\n 换行符<br />
\e Escape<br />
\0nn ASCII代码中八进制代码为nn的字符<br />
\xnn ASCII代码中十六进制代码为nn的字符<br />
\unnnn Unicode代码中十六进制代码为nnnn的字符<br />
\cN ASCII控制字符。比如\cC代表Ctrl+C<br />
\A 字符串开头(类似^，但不受处理多行选项的影响)<br />
\Z 字符串结尾或行尾(不受处理多行选项的影响)<br />
\z 字符串结尾(类似$，但不受处理多行选项的影响)<br />
\G 当前搜索的开头<br />
\p{name} Unicode中命名为name的字符类，例如\p{IsGreek}<br />
(?&gt;exp) 贪婪子表达式<br />
(?-exp) 平衡组<br />
(?im-nsx:exp) 在子表达式exp中改变处理选项<br />
(?im-nsx) 为表达式后面的部分改变处理选项<br />
(?(exp)yes|no) 把exp当作零宽正向先行断言，如果在这个位置能匹配，使用yes作为此组的表达式；否则使用no<br />
(?(exp)yes) 同上，只是使用空表达式作为no<br />
(?(name)yes|no) 如果命名为name的组捕获到了内容，使用yes作为表达式；否则使用no<br />
(?(name)yes) 同上，只是使用空表达式作为no</p>
<p>一、数字相关</p>
<p>1.1     非负整数</p>
<p>import re</p>
<p>nStr = &#8220;123&#8243;</p>
<p>p = re.compile(&#8216;^\d+$&#8217;,re.S)        非负整数（正整数与零）</p>
<p>if p.match(nStr):</p>
<p>print &#8220;exists&#8221;</p>
<p>else:</p>
<p>print &#8220;not&#8221;</p>
<p>1.2     正整数</p>
<p>import re</p>
<p>nStr = &#8220;123&#8243;</p>
<p>p = re.compile(&#8216;^[0-9]*[1-9][0-9]*$&#8217;,re.S)      正整数（不包括零在内）</p>
<p>if p.match(nStr):</p>
<p>print &#8220;exists&#8221;</p>
<p>else:</p>
<p>print &#8220;not&#8221;</p>
<p>1.3     非正整数（负整数+0）</p>
<p>import re</p>
<p>nStr = &#8220;-123&#8243;</p>
<p>p = re.compile(&#8216;^((-\d+)|(0+))$&#8217;,re.S)</p>
<p>if p.match(nStr):</p>
<p>print &#8220;exists&#8221;</p>
<p>else:</p>
<p>print &#8220;not&#8221;</p>
<p>1.4     负整数</p>
<p>import re</p>
<p>nStr = &#8220;-123&#8243;</p>
<p>p = re.compile(&#8216;^-[0-9]*[1-9][0-9]*$&#8217;,re.S)</p>
<p>if p.match(nStr):</p>
<p>print &#8220;exists&#8221;</p>
<p>else:</p>
<p>print &#8220;not&#8221;</p>
<p>1.5  整数</p>
<p>import re</p>
<p>nStr = &#8220;123&#8243;</p>
<p>p = re.compile(&#8216;^-?\d+$&#8217;,re.S)</p>
<p>if p.match(nStr):</p>
<p>print &#8220;exists&#8221;</p>
<p>else:</p>
<p>print &#8220;not&#8221;</p>
<p>1.6  非负浮点数（正浮点数 + 0）</p>
<p>import re</p>
<p>nStr = &#8220;0.123&#8243;</p>
<p>p = re.compile(&#8216;^\d+(\.\d+)?$&#8217;,re.S)</p>
<p>if p.match(nStr):</p>
<p>print &#8220;exists&#8221;</p>
<p>else:</p>
<p>print &#8220;not&#8221;</p>
<p>1.7  正浮点数</p>
<p>import re</p>
<p>nStr = &#8220;0.123&#8243;</p>
<p>p = re.compile(&#8216;^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$&#8217;,re.S)</p>
<p>if p.match(nStr):</p>
<p>print &#8220;exists&#8221;</p>
<p>else:</p>
<p>print &#8220;not&#8221;</p>
<p>1.8  非正浮点数（负浮点数 + 0）</p>
<p>import re</p>
<p>nStr = &#8220;-0.123&#8243;</p>
<p>p = re.compile(&#8216;^((-\d+(\.\d+)?)|(0+(\.0+)?))$&#8217;,re.S)</p>
<p>if p.match(nStr):</p>
<p>print &#8220;exists&#8221;</p>
<p>else:</p>
<p>print &#8220;not&#8221;</p>
<p>1.9  浮点数</p>
<p>import re</p>
<p>nStr = &#8220;-0.123&#8243;</p>
<p>p = re.compile(&#8216;^(-?\d+)(\.\d+)?$&#8217;,re.S)</p>
<p>if p.match(nStr):</p>
<p>print &#8220;exists&#8221;</p>
<p>else:</p>
<p>print &#8220;not&#8221;</p>
<p>二、字符相关</p>
<p>2.1 26个英文字母组成的字符串</p>
<p>import re</p>
<p>nStr = &#8220;abck&#8221;</p>
<p>p = re.compile(&#8216;^[A-Za-z]+$&#8217;,re.S)</p>
<p>if p.match(nStr):</p>
<p>print &#8220;exists&#8221;</p>
<p>else:</p>
<p>print &#8220;not&#8221;</p>
<p>如果是大写的话就是：^[A-Z]+$</p>
<p>如果是小写的话就是：^[a-z]+$</p>
<p>如果是数字与字母组合：^[A-Za-z0-9]+$</p>
<p>如果由数字、26个字母、或下划线组成的：^\w+$</p>
<p>三、HTML相关</p>
<p>3.1 匹配&lt;script&gt;标签的</p>
<p>#coding:utf-8</p>
<p>import re</p>
<p>nStr = &#8220;&lt;script src=&#8217;&#8230;js&#8217;&gt;&lt;/script&gt;&#8221;</p>
<p>p = re.compile(&#8216;&lt;\s*script[^&gt;]*&gt;[^&lt;]*&lt;\s*/\s*script\s*&gt;&#8217;,re.I)</p>
<p>if p.match(nStr):</p>
<p>print &#8220;exists&#8221;</p>
<p>else:</p>
<p>print &#8220;not&#8221;</p>
<p>3.2 匹配&lt;style&gt;标签</p>
<p>#coding:utf-8</p>
<p>import re</p>
<p>nStr = &#8220;&lt;style&gt;&lt;/style&gt;&#8221;</p>
<p>p = re.compile(&#8216;&lt;\s*style[^&gt;]*&gt;[^&lt;]*&lt;\s*/\s*style\s*&gt;&#8217;,re.I)</p>
<p>if p.match(nStr):</p>
<p>print &#8220;exists&#8221;</p>
<p>else:</p>
<p>print &#8220;not&#8221;</p>
<p>3.3 匹配HTML标签</p>
<p>#coding:utf-8</p>
<p>import re</p>
<p>nStr = &#8220;&lt;div&gt;&#8221;</p>
<p>p = re.compile(&#8216;&lt;/?\w+[^&gt;]*&gt;&#8217;,re.I)</p>
<p>if p.match(nStr):</p>
<p>print &#8220;exists&#8221;               输出</p>
<p>else:</p>
<p>print &#8220;not&#8221;</p>
<p>四、URL相关</p>
<p>4.1 匹配EMAIL地址</p>
<p>import re</p>
<p>nStr = &#8220;hkebao@126.com&#8221;</p>
<p>p = re.compile(&#8216;^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$&#8217;,re.S)</p>
<p>if p.match(nStr):</p>
<p>print &#8220;exists&#8221;</p>
<p>else:</p>
<p>print &#8220;not&#8221;</p>
<p>4.2 匹配URL</p>
<p>import re</p>
<p>nStr = &#8220;http://localhost&#8221;</p>
<p>p = re.compile(&#8216;^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$&#8217;,re.S)</p>
<p>if p.match(nStr):</p>
<p>print &#8220;exists&#8221;</p>
<p>else:</p>
<p>print &#8220;not&#8221;</p>
<p>re.match</p>
<p>re.match 尝试从字符串的开始匹配一个模式，如：下面的例子匹配第一个单词。</p>
<p>1. import re<br />
2.<br />
3. text = &#8220;JGood is a handsome boy, he is cool, clever, and so on&#8230;&#8221;<br />
4. m = re.match(r&#8221;(\w+)\s&#8221;, text)<br />
5. if m:<br />
6.     print m.group(0), &#8216;\n&#8217;, m.group(1)<br />
7. else:<br />
8.     print &#8216;not match&#8217;<br />
re.search</p>
<p>　　re.search函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回，如果字符串没有匹配，则返回None。</p>
<p>   1. import re<br />
   2.<br />
   3. text = &#8220;JGood is a handsome boy, he is cool, clever, and so on&#8230;&#8221;<br />
   4. m = re.search(r&#8217;\shan(ds)ome\s&#8217;, text)<br />
   5. if m:<br />
   6.     print m.group(0), m.group(1)<br />
   7. else:<br />
   8.     print &#8216;not search&#8217;  </p>
<p>re.match与re.search的区别：re.match只匹配字符串的开始，如果字符串开始不符合正则表达式，则匹配失败，函数返回None；而re.search匹配整个字符串，直到找到一个匹配。</p>
<p>re.sub</p>
<p>　　re.sub用于替换字符串中的匹配项。下面一个例子将字符串中的空格 &#8216; &#8216; 替换成 &#8216;-&#8217; : </p>
<p>   1. import re<br />
   2.<br />
   3. text = &#8220;abcde&#8221;<br />
   4. print re.sub(r&#8217;\s+&#8217;, &#8216;-&#8217;, text)  </p>
<p>re.sub(r&#8217;\s&#8217;, lambda m: &#8216;[' + m.group(0) + ']&#8216;, text, 0)；将字符串中的空格&#8217; &#8216;替换为&#8217;[ ]&#8216;。</p>
<p>re.split</p>
<p>　　可以使用re.split来分割字符串，如：re.split(r&#8217;\s+&#8217;, text)；将字符串按空格分割成一个单词列表。<br />
re.findall</p>
<p>　　re.findall可以获取字符串中所有匹配的字符串。如：re.findall(r&#8217;\w*oo\w*&#8217;, text)；获取字符串中，包含&#8217;oo&#8217;的所有单词。</p>
<p>Python 匹配任意字符（包括换行符）的正则表达式写法<br />
(.*)<br />
结果运行之后才发现，无法获得换行之后的文本。于是查了一下手册，才发现正则表达式中，“.”(点符号)匹配的是除了换行符“\n”以外的所有字符。<br />
以下为正确的正则表达式匹配规则：<br />
([\s\S]*)<br />
同时，也可以用 “([\d\D]*)”、“([\w\W]*)” 来表示。<br />
在文本文件里, 这个表达式可以匹配所有的英文<br />
/[ -~]/ </p>
]]></content:encoded>
			<wfw:commentRss>http://www.kingdict.net/i/2010/03/%e5%b8%b8%e7%94%a8%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f-python/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

