# -*- 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. 匿名内部类new Runnable()

    匿名内部类(Anonymous Inner Class),在创建实例的同时给出类的定义,所有这些在一个表达式中完成. Java code? 1 2 3 4 Runnable rn = new Runn ...

  2. 【问题汇总】ListView的FooterView设置可见性的问题

    ListView的FooterView一般用来给用户展示一些提示信息. 正常情况下,是这么使用的.代码例如以下: // footer footerLayout = new PullLoadingLay ...

  3. android学习日记07--Canvas画布

    1.Canvas Canvas类主要实现了屏幕的绘制过程,其中包含了很多实用的方法,比如绘制一条路径.区域.贴图.画点.画线.渲染文本,当然Android官网提示大家很多方法有不同的重载版本,参数更灵 ...

  4. 转ABAP将内表行列转换实例(动态内表) .

    把内表的行列转换,网上的例子很多,但是新人想看懂,几乎很难,所以总结下我是怎么完成的. 比如:你的内表如图: 你想让内表最后展示成这样:如图: 那么完成之后会是这样: 完成这个过程,得用到动态内表.看 ...

  5. Object.defineProperty vs __defineGetter__ vs normal

    Testing in Chrome 31.0.1650.63 32-bit on Windows Server 2008 R2 / 7 64-bit Test Ops/sec Object.defin ...

  6. 搜索引擎的提示效果完整的JavaScript代码

    function divShow() { <%--判断输入的是否为空 如果为空则隐藏div 如果不为空则显示div --%> if ($("#tbxSearchKeywords& ...

  7. Linq的小知识(一),大家可以学习一下

    linq的简介 lLINQ是Language Integrated Query的简称,它是集成在.NET编程语言中的一种特性.已成为编程语言的一个组成部分,在编写程序时可以得到很好的编译时语法检查,丰 ...

  8. C# 之 获取文件名及拓展名

    1.用Path类的方法(最常用) string fullPath = @"\WebSite\Default.aspx"; string filename = System.IO.P ...

  9. 关于c#中委托使用小结

    一.简述: 委托对与我们编程人员来说,一点都不陌生,在实际工作过程中,或多或少都应该是接触过 但是对与编程新手来说,对与委托的理解和使用应该还是一个坎,但是只要理解清楚了,这个坎也就过去了. 最近也经 ...

  10. MATLAB的基本元素

    MALTAB程序的基本数据单元是数组,MATLAB 的变量名必须以字母开头,后面可以跟字母,数字和下划线(_).只有前31个字符是有效的:如果超过了31 个字符,基余的字符将被忽略.如果声明两个变量, ...