正则表达式

来源:互联网 发布:淘宝商家被骗了怎么办 编辑:程序博客网 时间:2024/05/22 17:32
1.编程中如何区分两种模式

  默认是贪婪模式;

       在量词后面直接加上一个问号?就是非贪婪模式。

  量词:{m,n}:m到n个
     *:任意多个
     +:一个到多个
     ?:0或一个

2、正则表达式默认用的是贪婪模式

          贪婪模式针对的就是.的次数,就是尽可能的让.的数量最多,正则表达式里要满足的顺序就是从左到右

           "suMengs$s##s123"

            .*(s.*?s).*  匹配结果  s##s    原因是第一个.*采用贪婪模式,尽可能的让.匹配的字越多越好,最多就是从左往右一直匹配到倒数第二个s

            .*(s.*s).*  匹配结果  s##s    原因是先保证第一个.*最长,再考虑后面的.*

            .*?(s.*s).*  匹配结果 suMengs$s##s   原因是先保证第一个.*最短,再考虑后面的.*最长

            .*?(s.*?s).*  匹配结果  suMengs 

3、()括号就是选取的意思,也有括号原本的分割的功能
代码:

     line = "booby123" ;     regex_str = "((bobby|boobby)123)"     match_obj = re.match(regex_str, line)    if (match_obj):        print (match_obj.group(1))输出:
    match_obj.group(1) --> booby123
    match_obj.group(2) --> booby4、 [ ] 1、符合中括号里任意一个字符 2、符合范围内的数 3、[^1]取反,即不为1的字符 4、[]内的符号没有特殊含义[.]指的是点代码:
    line = "18730271234" ;    regex_str = "(1[34578][0-9]{9})"    match_obj = re.match(regex_str, line)    if (match_obj):    print (match_obj.group(1))
5、\s 空格 \S 除了空格以外的任何字符
\w [A-Za-z0-9_]
.包含所有字符
6、提取数据
例1:"1873027h哈哈大学" 
    "([\u4E00-\u9FA5]+大学)    输出为空
    ".*([\u4E00-\u9FA5]+大学    输出为哈大学
    ".*?([\u4E00-\u9FA5]+大学)"
输出为哈哈大学
例2:"%%%出生于2001年"
     ".*(\d+)年"
输出 1
     ".*?(\d+)年"    输出 2001