re
re
eddy_linux 发表于2年前
re
  • 发表于 2年前
  • 阅读 135
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

#!/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个分组的子表达式,如果它经匹配。否则指的是八进制字符码的表达式。


共有 人打赏支持
粉丝 19
博文 132
码字总数 185568
×
eddy_linux
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: