hello cc

python 正则表达式中的特殊符号介绍

Posted on 2014-11-20 17:28  星际海盗  阅读(944)  评论(0)    收藏  举报

python 2.7.3

  正则表达式:正则表达式就是根据自己的需要定义字符串而已,

  定义方法: s = r'\d{3,4}'    为了与字符串赋值做区分,定义时需要加个 r 。

  用途  : 定义好以后可以从其他给定的字符串(如网络数据流,网页代码)中查找与自己定义的字符串相同的字符串'. 如网页数据提取:自定义一个规则将网页中的内容按自己的规则提取出需要的东西。

目前在python 中,正则的使用通过re模块来实现,help(re) 查看详细介绍.

  可以为想要匹配的相应字符串集指定规则;该字符串集可能包含英文语句、e-mail地址、TeX命令或任何你想搞定的东西。你也可以使用 RE 以各种方式来修改或分割字符串。正则表达式模式被编译成一系列的字节码,然後由用 C 编写的匹配引擎执行。在高级用法中,也许还要仔细留意引擎是如何执行给定 RE ,如何以特定方式编写 RE 以令生产的字节码运行速度更快。

 

############################  元字符 ###########################

 一:字符匹配

1.普通字符匹配

    123和123匹配

2.元字符匹配(help(re)中有详细说明)

元字符有以下几类:

1) 代表特殊含义的有:‘\’和‘.’ 两个

2) 有6个是字符类的:\d 、\D、\s、\S、\w、\W

3) 有四个位置类:\b、\B、\A、\Z、以及 (^,$)

4)  重复 的有: *、+、?、{}

5)  用于分组: ()

6)  可选:        |、[]

7) 6个编译选项:I、L、M、S、U、X

分别介绍其含义:

"."  表示任意字符
"^ " 表示字符串的起始、行首:>>>str='123,321,234,432,123'  

               >>> ss='123' 

               >>> re.findall(ss,str)    //从str中查找123

              ['123', '123']

               >>>ss='^123'

               >>>re.findall(ss,str)

              ['123']    #123是行首的那个

            
"$" 表示字符串的结束  

              >>>ss='123$'  将匹配最后的那个123

+   表示匹配一或更多次

*  重复匹配0或更多次

?  表示匹配零次或一次-
*?, +?, ??  符合条件的情况下,匹配的尽可能少//限制*,+,?匹配的贪婪性
{m}      匹配此前的字符,重复m次  如:r='010-\d{8}' 将表示010-后面需要8个0到9的数字
{m,n}   m到n次,m,n可以省略

举个例子 ‘a.*b’ 表示a开始,b结束的任意字符串
a{5}  匹配连续5个a

[ ] 

 》 表示一系列字符  [abcd] 表a,b,c,d  注:ss = r'a[bcd]ef' ,将表示ss=abef 或acef或adef

    [0-9] 表示0到9 [a]

 》 补集匹配不在区间内的字符:[^123] ,表示将匹配除了123的其它字符

|  A|B 表示A或者B , AB为任意的正则表达式  另外|是非贪婪的如果A匹配,则不找B
(…)  这个括号的作用要结合实例才能理解, 用于提取信息

\d  [0-9] 匹配任何十进制数  [0-9]
\D  非 \d 匹配任何非十进制数 [^0-9]
\s  表示字符   [\t\n\r\f\v]
\S  非字符      [^\t\n\r\f\v]
\w  匹配任何字母数字字符[a-zA-Z0-9_]     
\W  非 \w

 --------------------------------------

  6 个正则表达式的编译标志:

  • I (IGNORECASE) 用于不区分大小的匹配
  • L (LOCALE) 使得特殊的序列(如词和空格)与语言设置相关
  • M (MULTILINE) 意味着在多行中搜索该模式,这样 ˆ 可以匹配字符串的开始位置和每一个换行符后面的位置,$ 可以匹配每一个换行符前面的位置和字符串的结束位置
  • S (DOTALL) 强制使用点专用字符 (.) 匹配任意字符,包括换行符
  • U (UNICODE) 使得特殊的序列可以感知 Unicode
  • X (VERBOSE) 可以增强您编写的正则表达式的可读性。要一次使用多个标志,只需将它们加在一起即可 — 如 re.compile("Oracle", re.I+re.S+re.M)。

 

M属性介绍:

>>> s = '''
... baidu glgoo cnblogs
... cnblogs
... baidu 163 baidu
... glgoo cnblogs
... '''
>>> r = r'^glgoo'
>>> re.findall(r,s)
[]
>>> re.findall(r,s,re.M)
['glgoo']

 

X属性介绍

>> s = '''
... \d{3,4}
... -?
... \d{8}
... '''
>>> re.findall(s,'321-12345678')
[]
>>> re.findall(s,'321-12345678',re.X)
['321-12345678']

>>>s

'\n\\d{3,4}\n-?\n\\d{8}\n' 

用'''定义的字符串存储时是用\n链接的,

 

hello man