Python,Re模块的学习

# -*- coding:UTF8 -*-
#1.概念:
#   正则表达式(或 RE)是一种小型的、高度专业化的编程语言,
#      (在Python中)它内嵌在Python中,并通过 re 模块实现。使用这个小型语言,
#       你可以为想要匹配的相应字符串集指定规则;该字符串集可能包含英文语句、email
#       地址、TeX命令或任何你想搞定的东西。然后你可以问诸如“这个字符串匹配
#       该模式吗?”或“在这个字符串中是否有部分匹配该模式呢?”。你也可以使用 RE
#       以各种方式来修改或分割字符串。
#
#   正则表达式语言相对小型和受限(功能有限),因此并非所有字符串处理都能用
#       正则表达式完成。当然也有些任务可以用正则表达式完成,不过最终表达式会变
#       得异常复杂。碰到这些情形时,编写 Python 代码进行处理可能反而更好;尽管
#       Python 代码比一个精巧的正则表达式要慢些,但它更易理解。
#
#2.在正则表达式中, 如下的字符是具有特殊含义的
#   . (所有字符)  ^  $  *(0-N次)  +(1-N次)  ? (0-1次) { } [  ]  \  |  ( ) 
#       1)."[" 和 "]"。它们常用来指定一个字符类别,所谓字符类别就是你想匹配的一个字符集
#       2).其它地方的"^"只会简单匹配 "^"字符本身。例[^5] 将匹配除 "5" 之外的任意字符。
#       3).反斜杠后面可以加不同的字符以表示不同特殊意义。它也可以用于取消所有的元字符
#
#3.RE 函数用法:
#       findall(rule , target [,flag] ) 在目标字符串中查找符合规则的字符串。
#       match() 决定 RE 是否在字符串刚开始的位置匹配
#       search() 扫描字符串,找到这个 RE 匹配的位置
#       findall() 找到 RE 匹配的所有子串,并把它们作为一个列表返回
#       finditer() 找到 RE 匹配的所有子串,并把它们作为一个迭代器返回
#       group() 返回被 RE 匹配的字符串
#       start() 返回匹配开始的位置
#       end() 返回匹配结束的位置
#       span() 返回一个元组包含匹配 (开始,结束) 的位置
#       compile( rule [,flag] )将正则规则编译成一个Pattern对象,以供接下来使用第一个参数   
#
#                                   是规则式,第二个参数是规则选项。(使用compile加速)
#
#4 : 含义:
#   预定义转义字符集: “\d”  “\w” “\s” 等等,它们是以字符’\’开头,后面接一个特定
#
#字符的形式,用来指示一个预定义好的含义
#
#   ‘^’  和’$’ 匹配字符串开头和结尾
#   ‘.’    匹配所有字符 除\n以外
#   ‘\d’  匹配数字
#   ‘\D’  匹配非数字
#   ‘\w’  匹配字母和数字
#   ‘\W’  匹配非英文字母和数字
#   ‘\s’   匹配间隔符
#   ‘\S’   匹配非间隔符
#   ‘\A’  匹配字符串开头
#   ‘\Z’  匹配字符串结尾
#   ‘\b’  只用以匹配单词的词首和词尾。单词被定义为一个字母数字序列,因此词尾就    
#
#                     是用空白符或非字母数字符来标示的。(退格)
#   ‘\B’,它正好同 \b 相反,只在当前位置不在单词边界时匹配。
#5.前向界定与后向界定:
#   ‘(?<=…)’ 前向界定:括号中’…’代表你希望匹配的字符串的前面应该出现的字符串。
#   ‘(?=…)’后向界定    :括号中的’…’代表你希望匹配的字符串后面应该出现的字符串
#   ‘(?<!..)’前向非界定 :只有当你希望的字符串前面不是’…’的内容时才匹配
#   ‘(?!...)’后向非界定  :只有当你希望的字符串后面不跟着’…’内容时才匹配。
#6.组的基本知识:
#   ‘(‘’)’                  无命名组                    [a-z]+(\d+)[a-z]+
#   ‘(?P<name>…)’    命名组                    (?P<g1>[a-z]+)\d+(?P=g1)
#   ‘(?P=name)’ 调用已匹配的命名组
#   ‘\number’通过序号调用已匹配的组正则式中的每个组都有一个序号,序号是按组
#
#从左到右,从1开始的数字,你可以通过下面的形式来调用已匹配的组
#                                            ( r"(\d+)([a-z]+)(\d+)(\2)(\1)" )   
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

import rhinoscriptsyntax as rs
# 正则表达式
import re
str1 = "abc \\ 123 456"
print re.findall("\\\\",str1)  # 不用r和用r的区
print re.findall(r"\d\Z",str1) # 用"r"来定义规则字符串

p = re.compile('(a)b')
m = p.match('ab')
print m.group()

s = "aaa1 22 gg 333 ccc 4444 pppp 55555 666"
print re.findall(r"\b\d{3}\b",s)
print re.findall(r"\b\d{2,4}\b",s)

s2 = "aaa111aaa , bbb222 , 333ccc"
print re.findall( r"(?<=[a-z]+)\d+(?=[a-z]+)",s2 )
print re.findall( r"\d+(?=[a-z]+)",s2 )
## 目标 前面是a-z 1-多次、中间数字1-9 1-多次
print re.findall(r"\d+(?!\w+)",s2)
#无命名组
print re.findall(r"[a-z]+(\d+)[a-z]+",s2) # 只返回()里面的
s3 = 'aaa111aaa,bbb222,333ccc,444ddd444,555eee666,fff777ggg,hhh888hhh'
print re.findall(r"([a-z]+)\d+([a-z]+)",s3) #返回括号里面的
#‘(?P<name>…)’ 命名组
print re.findall( r"(?P<g1>[a-z]+)\d+(?P=g1)",s3 ) #找出被中间夹有数字的前后同样的字母
print re.findall(r"([a-z]+)\d+\1",s3)
s4 = "111aaa222aaa111,333bbb444bb33"
print re.findall( r"(\d+)([a-z]+)(\d+)(\2)(\1)", s4 ) #数字、字母、数字、字母、数字相对称
print re.compile(r"(\d+)([a-z]+)(\d+)(\2)(\1)").findall(s4)

#compile( rule [,flag] ) 使用compile加速
s5 = "111,222,aaa,bbb,ccc333,444ddd"
print re.compile(r"\d+\b").findall(s5) # \退格 匹配一个位于开头的数字,没有使用M选项

s6 = "123 456\n789 012\n345 678"
print re.compile(r"^\d+",re.M).findall(s6) # 匹配位于(M/多行)开头的数字

rcm=re.compile(r"\d+$")# 对于’$’来说,没有使用M选项,它将匹配最后一个行尾的数字,即’678’,加上以后,就能匹配三个行尾的数字456 012和678了.
print re.compile(r"\d+$",re.M).findall(s6) # 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,026评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,655评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,726评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,204评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,558评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,731评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,944评论 2 314
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,698评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,438评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,633评论 2 247
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,125评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,444评论 3 255
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,137评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,103评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,888评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,772评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,669评论 2 271

推荐阅读更多精彩内容