python中的正则表达式和匹配函数

匹配函数,还有很多,自行百度

import re
def main():
    # match函数只可以从头开始匹配
    print("从头匹配 :{}".format(re.match("123","1234567")));
    print("从头匹配 :{}".format(re.match("123","1234567")));
    print("不匹配 :{}".format(re.match("9","1234567")));
    print("大小写匹配 :{}".format(re.match("123","1234567")));
    print("忽略大小写匹配 :{}".format(re.match("abc","ABC",re.I)));
    print("忽略大小写匹配 :{}".format(re.match("abc","ABC",re.IGNORECASE)));

    # 可以使用search
    print("匹配 :{}".format(re.search("456", "1234567")));
    print("忽略大小写匹配 :{}".format(re.search("abc", "aaaABC",re.IGNORECASE)));
    print("忽略大小写匹配 :{}".format(re.search("abc", "aaaABC",re.I)));

if __name__ == '__main__':
    main();

正则表达式

import re
# 匹配字母
def main():
    str = "ace";
    test_a = "a[bc][ce]";
    print(re.match(test_a,str,re.I))
# 匹配数字
def main_a():
    str = "11";
    test_a = "[0-9]";
    print(re.match(test_a,str,re.I))

# 带边界的匹配数字
def main_b():
    str = "11";
    test_a = "[0-9]$";
    print(re.match(test_a,str,re.I))

# 带边界的匹配数字
def main_b():
    str = "11";
    test_a = "[0-9]$";
    print(re.match(test_a,str,re.I))

# 测试findall,会找到所有的
def main_c():
    str = "food abc food";
    test_a = "fo[od][kld]";
    print(re.findall(test_a, str, re.I))

# 测试findall, $ 只匹配后面的内容
def main_d():
    str = "food abc food";
    test_a = "fo[od][kld]$";
    print(re.findall(test_a, str, re.I))

# 测试findall, ^ 只匹配开头的内容
def main_e():
    str = "food abc food";
    test_a = "^fo[od][kld]";
    print(re.findall(test_a, str, re.I))

# 匹配年月日
def main_f():
    str = "2020-01-01";
    test_a = "[0-9]{4}-[0-9]{2}-[0-9]{2}";
    print(re.match(test_a, str, re.I))

# 根据数字拆分匹配 \d根据数字拆,+号匹配多次
def main_g():
    str = "a1b2c3d4e";
    test_a = "\d+";
    print(re.split(test_a, str))

# 匹配成绩
def main_h():
    input_data = input("输入个成绩:");
    test_a = r"^[+-]?\d+(\.\d+)?$";
    if re.match(test_a,input_data,re.I):
        print("yes");
    else:
        print("no");

# 匹配号码,匹配较为负责的正则
def main_i():
    input_data = input("输入个号码:");
    # (\d{3,4})?输入3-4位数字,可输入可不输入
    # \d{7,8} 输入7-8位数字
    # | 只要符合两个其中一个条件即可
    # (\(\d{3,4}\)-) 3-4位数字加括号和- 比如 (010)-
    test_a = r"^((\d{
     
     3,4})|(\(\d{
     
     3,4}\)-))?\d{7,8}$";
    if re.match(test_a,input_data,re.I):
        print("yes");
    else:
        print("no");

# 匹配多行
def main_j():
    data = """
    Food is Very important
    Food is Very important
    Food is Very important
    """;
    test_a = "fo{2}d";
    # re.M 多行匹配
    result = re.findall(test_a,data,re.I,re.M);
    print(result);

# 匹配多行
def main_k():
    data = """
    Food is Very important
    Food is Very important
    Food is Very important
    """;
    test_a = ".+";
    print("默认.匹配 {}".format(re.findall(test_a,data)));
    print("修改.匹配 {}".format(re.findall(test_a,data,re.S)));

# 匹配email
def main_l():
    email = input("输入你的邮箱:");
    test_a = r""""
        [a-zA-Z0-9]             # 匹配第一个字母,由非数字所组成
        \w+@\w+                 # 用户名中间部分由字母丶数字丶"_"所组成
        \.                      # 匹配出现的"."
        (cn|com|com.cn|net|gov) # 匹配邮箱的域名,只允许出现这几个
    """;
    if re.match(test_a,email,re.Ire.X):
        print("输入正确");
    else:
        print("输入错误");

# ()分组 如果要定义分组名称  ?P<year> 代表定义了组名称年
def main_m():
    info = "id:1,name:2,birthday:2021-03-11";
    test_a = r"(?P<year>\d{
    
    4})-(?P<month>\d{
    
    2})-(?P<day>\d{
    
    2})";
    print("获取所有符合匹配要求的分组数据 {
    
    }".format(re.search(test_a,info).group()));
    print("获取第一组数据 {
    
    }".format(re.search(test_a,info).group(1)));
    print("获取第二组数据 {
    
    }".format(re.search(test_a,info).group(2)));
    print("获取第三组数据 {
    
    }".format(re.search(test_a,info).group(3)));
    print("获取年数据 {
    
    }".format(re.search(test_a,info).group("year")));
    print("获取月数据 {
    
    }".format(re.search(test_a,info).group("month")));
    print("获取天数据 {
    
    }".format(re.search(test_a,info).group("day")));


# 环视
def main_n():
    # 要匹配的数据
    info = "id:1,name:2,tel:3;id:4,name:5,tel:6";
    # (?<=id:) 获取所有id数据 (?P<name>\w+)分组命名name,匹配所有的数据
    test_a = r"(?<=id:)(?P<name>\w+)";
    print(re.findall(test_a,info))

if __name__ == '__main__':
    main_n();

猜你喜欢

转载自blog.csdn.net/weixin_44887276/article/details/114638251