#!/usr/bin/env python
# encoding: utf-8
import re
#python的正则表达式:
# 元字符
# . 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
# [.....] 用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
# [^.....] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符
# ? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
# + 匹配1个或多个的表达式
# {m}
# {m,n} 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
# {0,n} 匹配 0 到 n 次由前面的正则表达式定义的片段,贪婪方式
# {m,} 精确匹配m个前面表达式
# ^ 匹配字符串的开头
# $ 匹配字符串的末尾
# pat1|pat2 匹配pat1或pat2
# (.....)
# \b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
# [0-9]:\b
# [0-9a-zA-Z]:\w,\W对\w取反
# \s:任意空白字符,[\n\t\f\v\r],\S
# \nn
# (*|+|?|{})?:使用非贪婪模式
# match对象:
# 可以指定起始位置,结束位置,匹配到的字符等
#search只返回第一次匹配到的结果
#findall返回多次
# re.search:返回一个macth对象
# match对象的
# 属性
# string
# re
# end
#flags:
# I或IGNORECASE:忽略字符大小写
# M或MULTILINE:多行匹配
# A或ASCII:仅执行8位ASCII码匹配
# U或UNICODE:
# S使 . 匹配包括换行在内的所有字符
#match
#re.match(pattern, string, flags=0)
# pattern 匹配的正则表达式
# string 要匹配的字符串。
# flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
#匹配成功re.match方法返回一个匹配的对象,否则返回None。
#我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
#group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
#groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
re.match('www','www.eddy.com').group()
re.match('www','www.eddy.com').span()
re.match('com','www.eddy.com')
#www
#(0, 3)
#None
line = "Cats are smarter than dogs"
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
if matchObj:
print "matchObj.group() : ", matchObj.group()
print "matchObj.group(1) : ", matchObj.group(1)
print "matchObj.group(2) : ", matchObj.group(2)
else:
print "No match!!"
#search
#re.search(pattern, string, flags=0)
#pattern 匹配的正则表达式
#string 要匹配的字符串。
#flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
#匹配成功re.search方法返回一个匹配的对象,否则返回None。
#我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式
print(re.search('www', 'www.runoob.com').span()) #在起始位置匹配
print(re.search('com', 'www.runoob.com').span()) #不在起始位置匹配
#re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
line = "Cats are smarter than dogs";
matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
print "match --> matchObj.group() : ", matchObj.group()
else:
print "No match!!"
matchObj = re.search( r'dogs', line, re.M|re.I)
if matchObj:
print "search --> matchObj.group() : ", matchObj.group()
else:
print "No match!!"
#检索和替换
#re.sub(pattern, repl, string, max=0)
#返回的字符串是在字符串中用 RE 最左边不重复的匹配来替换。如果模式没有发现,字符将被没有改变地返回。
#可选参数 count 是模式匹配后替换的最大次数;count 必须是非负整数。缺省值是 0 表示替换所有的匹配。
phone = "2004-959-559 # This is Phone Number"
# Delete Python-style comments
num = re.sub(r'#.*$', "", phone)
print "Phone Num : ", num
# Remove anything other than digits
num = re.sub(r'\D', "", phone)
print "Phone Num : ", num
#实际运用
#一般采用findall('(.*?)')
a = '12121dasdasdsad32sadasdas2sadasd'
print re.findall('(\d)',a,re.S)
print re.findall('(\d+)',a,re.S)
phone = '2004-959-559 # This is Phone Number'
print re.findall('\d',phone,re.S)
print re.findall('(\d)',phone,re.S)
print re.findall('(\d+)',phone,re.S)
a = 'dassadjasdkljasxxlxxsdhasjkdhjasxxlovexxdhaskjdhaskjdhjxxyouxx'
print re.findall('xx.*xx',a,re.S)
print re.findall('xx.*?xx',a,re.S)
print re.findall('xx(.*?)xx',a,re.S)
#之匹配第一次配对的
print re.search('xx.*xx',a,re.S).group()
print re.search('xx.*?xx',a,re.S).group()
print re.search('xx(.*?)xx',a,re.S).group()
a =[
'activemq-broker-5.10.0.jar',
'activemq-client-5.10.0.jar',
'activemq-jms-pool-5.10.0.jar',
'activemq-openwire-legacy-5.10.0.jar',
'activemq-pool-5.10.0.jar',
'activemq-spring-5.10.0.jar',
'antlr-2.7.6.jar',
'aopalliance-1.0.jar',
'asm-3.3.1.jar',
'aspectjrt-1.7.0.jar',
'aspectjweaver-1.7.0.jar',
'bcprov-jdk16-140.jar',
'cardpay-api-common-1.0.2.jar',
'cardpay-api-payment-1.0.2.jar',
'cardpay-api-query-1.0.2.jar',
'commons-beanutils-1.8.0.jar',
'commons-codec-1.7.jar',
'commons-collections-3.2.1.jar',
'commons-httpclient-3.1.1.jar',
'commons-io-2.4.jar',
'commons-lang-2.6.jar',
'commons-logging-1.1.1.jar',
'commons-pool-1.6.jar',
'commons-pool2-2.0.jar',
'cxf-core-3.0.0.jar',
'cxf-rt-bindings-soap-3.0.0.jar',
'cxf-rt-bindings-xml-3.0.0.jar',
'cxf-rt-databinding-jaxb-3.0.0.jar',
'cxf-rt-frontend-jaxws-3.0.0.jar',
'cxf-rt-frontend-simple-3.0.0.jar',
'cxf-rt-transports-http-3.0.0.jar',
'cxf-rt-ws-addr-3.0.0.jar',
'cxf-rt-wsdl-3.0.0.jar',
'cxf-rt-ws-policy-3.0.0.jar',
'dom4j-1.6.1.jar',
'druid-1.0.2.jar',
'dubbo-2.5.3.jar',
'fastjson-1.1.36.jar',
'geronimo-j2ee-management_1.1_spec-1.0.1.jar',
'geronimo-jms_1.1_spec-1.1.1.jar',
'geronimo-jta_1.0.1B_spec-1.0.1.jar',
'hamcrest-core-1.1.jar',
'hawtbuf-1.10.jar',
'hibernate-commons-annotations-3.2.0.Final.jar',
'hibernate-core-3.6.10.Final.jar',
'hibernate-jpa-2.0-api-1.0.0.Final.jar',
'icu4j-2.6.1.jar',
'javassist-3.15.0-GA.jar',
'jaxb-impl-2.1.13.jar',
'jaxen-1.1.jar',
'jdom-1.0.jar',
'jedis-2.4.2.jar',
'jline-0.9.94.jar',
'jsoup-1.8.2.jar',
'jta-1.1.jar',
'kxml2-2.1.8.jar',
'log4j-1.2.17.jar',
'mysql-connector-java-5.1.21.jar',
'neethi-3.0.3.jar',
'netty-3.2.5.Final.jar',
'payment-channel-atmp-0.4.6-SNAPSHOT.jar',
'payment-channel-boss-api-0.4.6-SNAPSHOT.jar',
'payment-channel-bppos-0.4.6-SNAPSHOT.jar',
'payment-channel-cbhb-0.4.6-SNAPSHOT.jar',
'payment-channel-cmbc-0.4.6-SNAPSHOT.jar',
'payment-channel-cmsp-0.4.6-SNAPSHOT.jar',
'payment-channel-dao-0.4.6-SNAPSHOT.jar',
'payment-channel-entity-0.4.6-SNAPSHOT.jar',
'payment-channel-leFuGateway-0.4.6-SNAPSHOT.jar',
'payment-channel-phoneRecharge-0.4.6-SNAPSHOT.jar',
'payment-channel-posp-0.4.6-SNAPSHOT.jar',
'payment-channel-reapal-0.4.6-SNAPSHOT.jar',
'payment-channel-route-api-0.4.6-SNAPSHOT.jar',
'payment-channel-service-0.4.6-SNAPSHOT.jar',
'payment-channel-shengpay-0.4.6-SNAPSHOT.jar',
'payment-channel-umbGateway-0.4.6-SNAPSHOT.jar',
'payment-channel-umpay-0.4.6-SNAPSHOT.jar',
'payment-channel-upAcp-0.4.6-SNAPSHOT.jar',
'payment-channel-yeePayGateway-0.4.6-SNAPSHOT.jar',
'payment-channel-yeePayGatewayPlus-0.4.6-SNAPSHOT.jar',
'payment-cm-api-0.4.6-SNAPSHOT.jar',
'payment-cm-entity-0.4.6-SNAPSHOT.jar',
'payment-common-0.4.6-SNAPSHOT.jar',
'payment-monitor-api-0.4.6-SNAPSHOT.jar',
'payment-pss-common-api-0.4.6-SNAPSHOT.jar',
'payment-security-api-0.4.6-SNAPSHOT.jar',
'payment-task-api-0.4.6-SNAPSHOT.jar',
'paysdk-2.0.0.jar',
'quartz-1.8.5.jar',
'slf4j-api-1.7.2.jar',
'slf4j-log4j12-1.7.2.jar',
'slf4j-simple-1.7.2.jar',
'spring-aop-3.2.8.RELEASE.jar',
'spring-beans-3.2.8.RELEASE.jar',
'spring-context-3.2.8.RELEASE.jar',
'spring-context-support-3.2.8.RELEASE.jar',
'spring-core-3.2.8.RELEASE.jar',
'spring-data-redis-1.3.0.RELEASE.jar',
'spring-expression-3.2.8.RELEASE.jar',
'spring-jdbc-3.2.8.RELEASE.jar',
'spring-jms-4.1.3.RELEASE.jar',
'spring-orm-3.2.8.RELEASE.jar',
'spring-tx-3.2.8.RELEASE.jar',
'spring-web-3.2.8.RELEASE.jar',
'spring-webmvc-3.2.8.RELEASE.jar',
'stax2-api-3.1.4.jar',
'umpay.sign-4.0.jar',
'woodstox-core-asl-4.3.0.jar',
'wsdl4j-1.6.3.jar',
'xalan-2.6.0.jar',
'xbean-spring-3.16.jar',
'xercesImpl-2.6.2.jar',
'xml-apis-1.3.02.jar',
'xmlParserAPIs-2.6.2.jar',
'xmlpull-1.1.3.1.jar',
'xml-resolver-1.2.jar',
'xmlschema-core-2.1.0.jar',
'xom-1.0.jar',
'xpp3_min-1.1.4c.jar',
'xstream-1.4.4.jar',
'zkclient-0.1.jar',
'zookeeper-3.4.5.jar',
]
b =[
'payment-channel-atmp-0.4.6-SNAPSHOT.jar',
'payment-channel-boss-api-0.4.6-SNAPSHOT.jar',
'payment-channel-bppos-0.4.6-SNAPSHOT.jar',
'payment-channel-cbhb-0.4.6-SNAPSHOT.jar',
'payment-channel-cmbc-0.4.6-SNAPSHOT.jar',
'payment-channel-cmsp-0.4.6-SNAPSHOT.jar',
'payment-channel-dao-0.4.6-SNAPSHOT.jar',
'payment-channel-entity-0.4.6-SNAPSHOT.jar',
'payment-channel-leFuGateway-0.4.6-SNAPSHOT.jar',
'payment-channel-phoneRecharge-0.4.6-SNAPSHOT.jar',
'payment-channel-posp-0.4.6-SNAPSHOT.jar',
'payment-channel-reapal-0.4.6-SNAPSHOT.jar',
'payment-channel-route-api-0.4.6-SNAPSHOT.jar',
'payment-channel-service-0.4.6-SNAPSHOT.jar',
'payment-channel-shengpay-0.4.6-SNAPSHOT.jar',
'payment-channel-umbGateway-0.4.6-SNAPSHOT.jar',
'payment-channel-umpay-0.4.6-SNAPSHOT.jar',
'payment-channel-upAcp-0.4.6-SNAPSHOT.jar',
'payment-channel-yeePayGateway-0.4.6-SNAPSHOT.jar',
'payment-channel-yeePayGatewayPlus-0.4.6-SNAPSHOT.jar',
'payment-cm-api-0.4.6-SNAPSHOT.jar',
'payment-cm-entity-0.4.6-SNAPSHOT.jar',
'payment-common-0.4.6-SNAPSHOT.jar',
'payment-monitor-api-0.4.6-SNAPSHOT.jar',
'payment-pss-common-api-0.4.6-SNAPSHOT.jar',
'payment-security-api-0.4.6-SNAPSHOT.jar',
'payment-task-api-0.4.6-SNAPSHOT.jar',
]
#集合方式
c = set(a)
d = set(b)
c & d
c ^ d
#取出a列表中的paymen开头的元素
for i in a:
if re.match('payment',i):
print i
#实例 描述
#. 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
#\d 匹配一个数字字符。等价于 [0-9]。
#\D 匹配一个非数字字符。等价于 [^0-9]。
#\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
#\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
#\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
#\W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
#[Pp]ython 匹配 "Python" 或 "python"
#rub[ye] 匹配 "ruby" 或 "rube"
#[aeiou] 匹配中括号内的任意一个字母
#[0-9] 匹配任何数字。类似于 [0123456789]
#[a-z] 匹配任何小写字母
#[A-Z] 匹配任何大写字母
#[a-zA-Z0-9] 匹配任何字母及数字
#[^aeiou] 除了aeiou字母以外的所有字符
#[^0-9] 匹配除了数字外的字符
#
#模式 描述
#^ 匹配字符串的开头
#$ 匹配字符串的末尾。
#. 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
#[...] 用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
#[^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
#re* 匹配0个或多个的表达式。
#re+ 匹配1个或多个的表达式。
#re? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
#re{ n}
#re{ n,} 精确匹配n个前面表达式。
#re{ n, m} 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
#a| b 匹配a或b
#(re) G匹配括号内的表达式,也表示一个组
#(?imx) 正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。
#(?-imx) 正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。
#(?: re) 类似 (...), 但是不表示一个组
#(?imx: re) 在括号中使用i, m, 或 x 可选标志
#(?-imx: re) 在括号中不使用i, m, 或 x 可选标志
#(?#...) 注释.
#(?= re) 前向肯定界定符。如果所含正则表达式,以 ... 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。
#(?! re) 前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功
#(?> re) 匹配的独立模式,省去回溯。
#\w 匹配字母数字
#\W 匹配非字母数字
#\s 匹配任意空白字符,等价于 [\t\n\r\f].
#\S 匹配任意非空字符
#\d 匹配任意数字,等价于 [0-9].
#\D 匹配任意非数字
#\A 匹配字符串开始
#\Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。c
#\z 匹配字符串结束
#\G 匹配最后匹配完成的位置。
#\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
#\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
#\n, \t, 等. 匹配一个换行符。匹配一个制表符。等
#\1...\9 匹配第n个分组的子表达式。
#\10 匹配第n个分组的子表达式,如果它经匹配。否则指的是八进制字符码的表达式。
转载于:https://my.oschina.net/eddylinux/blog/531593