# -*- coding: cp936 -*-
import re
idcardregex=r"^[1-9]\d{14}(\d{2}[0-9x])?$"
print re.search(idcardregex,"110101198001017016")!=None
print re.search(idcardregex,"1101018001017016")!=None
print re.search(idcardregex,"11010119800101701x")!=None

print "month tags:"
print re.search(r"(0?[1-9]|1[012])","11")!=None
print re.search(r"(0?[1-9]|1[012])","08")!=None

print "month:"
print re.search(r"(0?[1-9]|1[012])","11")!=None

print "day:"
print re.search(r"(0?[1-9]|[12]\d|3[01])","28")!=None

print "hour:"
print re.search(r"(0?[1-9]|[01]\d|2[0-4])","28")!=None

print "minute:"
print re.search(r"(0?[1-9]|[0-5]\d|60)","71")!=None

print "year-month-day"
print re.search(r"(\d{4})-(\d{2})-(\d{2})","2013-12-08")!=None
print re.search(r"(\d{4})-(\d{2})-(\d{2})","2013-12-08").group(0)

print re.sub(r"(\d{4})-(\d{2})-(\d{2})",r"\2/\3/\1","2013-12-08")
print re.sub(r"(\d{4})-(\d{2})-(\d{2})",r"\1年\2月\3日","2013-12-08")

print "复杂tag:"
pairedTagRegex=r"<([a-zA-Z0-9]+)(\s[^>]+)?>[\s\S]*?</\1>"
print re.search(pairedTagRegex,"<bold>text</bold>")!=None
print re.search(pairedTagRegex,"<span class=\"class1\">text</span>")!=None

print "匹配IP其中一段的表达式"
segment=r"(0{0,2}[0-9]|0?[0-9]{2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"
print "正确的IP表达式"
ipAddressRegex=r"(" + segment + r"\.){3}" +segment

print re.search(ipAddressRegex,"54.214.20.33")!=None

nameregex=r"(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})"
result=re.search(nameregex,"2013-12-08")
print result.group("year")
print result.group("month")
print result.group("day")

print "存在(),捕获分组"
print re.findall('(\w+\.?)+','aaa.bbb.ccc')
print "不存在(),正常捕获"
print re.findall('\w+\.?','aaa.bbb.ccc.ddd')

print "边界:"
print re.findall(r"\b\w+\b","a sentence\tcontains\na lot of words")

string="tomorrow I will wear in brown standing in row 10 next to the rowdy guy"
rowWordRegex=r"\brow\b"

print "提取每行的第一个单词"
string="first line\nsecond line\r\nlast line"
lineBeginWordRegex=r"(?m)^\w+"
print re.findall(lineBeginWordRegex,string)

print "提取整段文本的第一个单词"
string="first line\nsecond line\r\nlast line"
lineBeginWordRegex=r"(?m)\A\w+"
print re.findall(lineBeginWordRegex,string)

print "匹配整段文本的最后一个单词"
stringEndWordRegex=r"\w+$"
string="some sample text"
print re.findall(stringEndWordRegex,string)

string="some sample text\n"
print re.findall(stringEndWordRegex,string)

print "匹配每行的最后一个单词"
string="first line\nsecond line\r\nlast line"
lineEndWordRegex=r"\w+(?m)$"
print re.findall(lineEndWordRegex,string)

print "只使用^和$验证6位数字字符串,可能会有漏洞"
print re.search(r"^\d{6}$","123456")!=None
print re.search(r"^\d{6}$","123456\n")!=None

print "Python不支持\z,它的\Z等价于其他语言中的\z"
print re.search(r"\A\d{6}\Z","123456")!=None
print re.search(r"\A\d{6}\Z","123456\n")!=None

plainText="line1\nline2\nline3"
print plainText

print re.sub(r"(?m)$","</p>",re.sub(r"(?m)^","<p>",plainText))

print "去除行首的空白字符"
whiteSpace="   begin\n between\t\n\nend"
beginSpaceRegex=r"(?m)^\s+"
trimmedLeadingSpace=re.sub(beginSpaceRegex,"",whiteSpace)
print trimmedLeadingSpace

print "去除行尾的空白字符"
endSpaceRegex=r"(?m)\s+$"
trimmedEndingSpace=re.sub(endSpaceRegex,"",trimmedLeadingSpace)
print trimmedEndingSpace

print "多选形式的测试,行不通"
whiteSpace="   begin\n between\t\n\nend"
spaceRegex=r"(?m)(^\s+|\s+$)"
spaceTrimmed=re.sub(spaceRegex,"",whiteSpace)
print spaceTrimmed

print "环视(?=...)肯定顺序环视,向右"
print "环视(?!...)否定顺序环视,向右"
print "环视(?<=...)肯定逆序环视,向左"
print "环视(?<!...)否定逆序环视,向左"

print "去掉中英文混排文本中不必要的空白字符"
mixedString=" 中 英文混排,some English word, 有多余的空 白字符  "
spaceBetweenChineseRegex=r"(?<![a-zA-Z])\s+(?![a-zA-Z])"
print re.sub(spaceBetweenChineseRegex,"",mixedString)

print "["+re.sub(spaceBetweenChineseRegex,"",mixedString)+"]"
negativeSpaceTrimRegex=r"(?<=[^a-zA-Z])\s+(?=[^a-zA-Z])"
print "["+re.sub(negativeSpaceTrimRegex,"",mixedString)+"]"

print "准确匹配主机名的正则表达式"
hostnameRegex=r"^(?=[-a-zA-Z]0-9.]{0,255}(?![-a-zA-Z0-9.]))((?!-)[-a-zA-Z0-9]{1,63}\.)*((?!-)[-a-zA-Z0-9]){1,63}$"
#应该匹配的
re.search(hostnameRegex,"localhost")!=None
re.search(hostnameRegex,"example.com")!=None
#不应该匹配的
#"e"*64 表示将64个"e"连接在一起组成的字符串
re.search(hostnameRegex,"-example.com")!=None
re.search(hostnameRegex,("e"*64)+".com")!=None
re.search(hostnameRegex,"e"*256)!=None

print "十六进制"
print r"[0-9a-fA-F]+"

print "MD5字符串 C37B58C783456BF879C3DD5C519195A2"
print "[0-9a-fA-F]{32}"

print "浮点数 +3.14 +0.07 3.6 -12"
print "(+?([0-9]+|[0-9]+\.[0-9]+|\.[0-9]+)|-?([0-9]+|[0-9]+\.[0-9]+))"

print "逗号分隔的整数 12,414,421 231,457,111 3,456 "
print "(?<![0-9])[0-9]{1,3}(,[0-9]{3})*(?![0-9])"

print "中午字符"
print "[\u4e00-\u9fff]"

print "中文间多余的空白字符"
print "(?<=[\u4e00-\u9fff])\s+(?=[\u4e00-\u9fff])"
print "(?<=[^\x00-\x7f])\s+(?=[^\x00-\x7f])"

print "价格 $ 46 ¥188.88 88.0 12300 "
print "[¥$]?\s*[0-9]+(\.[0-9]{2})?"
#增加断言判断之后不是数字字符
print "[¥$]?\s*[0-9]+(\.[0-9]{2})?(?![0-9]))"

print "手机号码 013801254780 +8613800113366 +86 15212124545 0086 13588887774 "
print "((0|(00|\+)86\s?)?(13[0-9]|15[0-356]|18[025-9])\d{8}"
#增加断言判断之前,之后都不是数字
print "(?<![0-9])((0|(00|\+)86\s?)?(13[0-9]|15[0-356]|18[025-9])\d{8}(?![0-9])"

print "固定电话号码 12345678 021-12345678 0731-12345678 (010)12345678 "
print "(\(?0[1-9]{2,3}\)?-?)?[1-9][0-9]\{6,7}(-[0-9]{1,6})?"
#增加断言判断之前,之后都不是数字
print "(?<![0-9])(\(?0[1-9]{2,3}\)?-?)?[1-9][0-9]\{6,7}(-[0-9]{1,6})?(?![0-9])"

print "邮政编码 100859 412000"
print "[1-9][0-9]{5}"

print "身份证号码 31010019800112071 10010019800101207x 310100800101207 "
print "[1-9][0-9]{14}([0-9]{2}[0-9xX])?"

python正则实例的更多相关文章

  1. Python正则简单实例分析

    Python正则简单实例分析 本文实例讲述了Python正则简单用法.分享给大家供大家参考,具体如下: 悄悄打入公司内部UED的一个Python爱好者小众群,前两天一位牛人发了条消息: 小的测试题:  ...

  2. Python爬虫实例:爬取猫眼电影——破解字体反爬

    字体反爬 字体反爬也就是自定义字体反爬,通过调用自定义的字体文件来渲染网页中的文字,而网页中的文字不再是文字,而是相应的字体编码,通过复制或者简单的采集是无法采集到编码后的文字内容的. 现在貌似不少网 ...

  3. Python正则替换字符串函数re.sub用法示例(1)

    本文实例讲述了Python正则替换字符串函数re.sub用法.分享给大家供大家参考,具体如下: python re.sub属于python正则的标准库,主要是的功能是用正则匹配要替换的字符串然后把它替 ...

  4. 认识python正则模块re

    python正则模块re python中re中内置匹配.搜索.替换方法见博客---python附录-re.py模块源码(含re官方文档链接) 正则的应用是处理一些字符串,phthon的博文python ...

  5. Python正则式的基本用法

    Python正则式的基本用法 1.1基本规则 1.2重复 1.2.1最小匹配与精确匹配 1.3前向界定与后向界定 1.4组的基本知识 2.re模块的基本函数 2.1使用compile加速 2.2 ma ...

  6. python 正则,常用正则表达式大全

    Nginx访问日志匹配 re.compile #re.compile 规则解释,改规则必须从前面开始匹配一个一个写到后面,前面一个修改后面全部错误.特殊标准结束为符号为空或者双引号:  改符号开始 从 ...

  7. python基础——实例属性和类属性

    python基础——实例属性和类属性 由于Python是动态语言,根据类创建的实例可以任意绑定属性. 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(objec ...

  8. python 正则使用笔记

    python正则使用笔记 def remove_br(content): """去除两边换行符""" content = content.r ...

  9. Python正则处理多行日志一例

    正则表达式基础知识请参阅<正则表达式基础知识>,本文使用正则表达式来匹配多行日志并从中解析出相应的信息. 假设现在有这样的SQL日志: SELECT * FROM open_app WHE ...

随机推荐

  1. java中的url 编码与解码

    什么是application/x-www-form-urlencoded字符串? 答:它是一种编码类型.当URL地址里包含非西欧字符的字符串时,系统会将这些字符转换成application/x-www ...

  2. iOS开发——适配篇&iOS9适配

    iOS9适配 1. Demo1_iOS9网络适配_ATS:改用更安全的HTTPS [摘要]iOS9把所有的http请求都改为https了:iOS9系统发送的网络请求将统一使用TLS 1.2 SSL.采 ...

  3. mysqldump原理5

    http://blog.csdn.net/niu870781892/article/details/6186078 导出多张表的时候表之间用空格分开: # mysqldump -h192.168.25 ...

  4. [Effective C++ --016]成对使用New和Delete时要采用相同形式

    这一节比较简单,可以总结为以下: std::string *stringPtr1 = new std::string; std::]; .. delete stringPtr1; // delete ...

  5. Jordan Lecture Note-5: Kernels

    Kernels 我们首先来回顾kernel函数的定义:一个函数$K(x,y)$为kernel函数当且仅当对$\forall g, \int K(x,y)g(x)g(y)dxdy\geq 0$成立.另外 ...

  6. C#_数据库基本交互

    //app.config <?xml version="1.0" encoding="utf-8" ?> <configuration> ...

  7. Android 自定义View修炼-打造完美的自定义侧滑菜单/侧滑View控件

    一.概述 在App中,经常会出现侧滑菜单,侧滑滑出View等效果,虽然说Android有很多第三方开源库,但是实际上 咱们可以自己也写一个自定义的侧滑View控件,其实不难,主要涉及到以下几个要点: ...

  8. ASP.NET 不同页面之间传值

    不同页面之间如何传值?我们假设A和B两个页面,A是传递,B是接收. 下面学习4种方式: 通过URL链接地址传递 POST方式传递 Session方式传递 Application方式传递 1. 通过UR ...

  9. 多线程NSOperation

      NSOperation(经常使用): 1.为什么会有NSOperation?弥补gcd的一些问题:1)下载为例子:如果gcd放到队列中的block操作面对网络有问题,block之外无法取消bloc ...

  10. Listview实现分页下载

    分析: * 1.初始控件,展示第一页数据 * 2.设置触发条件 * 1.设置滚动监听 * 2.判断是否在底部 * 3.判断是否停止滚动 * 4.更改网络请求参数为下一页 * 5.异步网络请求 * 6. ...