49.python正则表达式用法--提取所有邮件地址

 

mail_list = '123<aa2@163.com>acdef, 123123;<ba1@qq.com>acdef,;w8<aah@163.com>acdef,;dtg<ca@186.com>acdef,;jjdtg<qd@163.com>acdef,;jjtr'
    print('提取所有邮件地址')
    pattern6 = '^<.+'
    pattern6a = '[a-z]*[0-9]*@[a-z]*[0-9]*.com'  #匹配对象
    #print('msg:', re.search(pattern6a, mail_list))
    print('msg_search:', re.search(pattern6a, mail_list).group())  #只返回首次,第一次匹配的结果
    print('msg_find_all:', re.findall(pattern6a, mail_list))  # 返回所有匹配的结果
    print('msg_find_all_0:', re.findall(pattern6a, mail_list)[0])
    print('msg_find_all_1:', re.findall(pattern6a, mail_list)[1])

 

# This is a sample Python script.

# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.

#https://docs.
#python.org/3/howto/regex.html)也是很有用的Python正则表达式学习资料。
import re


def print_hi(name):
    # Use a breakpoint in the code line below to debug your script.
    print(f'Hi, {name}')  # Press Ctrl+F8 to toggle the breakpoint.

'''
通配符 . (一个小点)
句点只与一个字符匹配,而不与零或两个字符匹配
 字符集
匹配任何字符很有用,但有时你需要更细致地控制。为此,可以用方括号将一个子串括起,
创建一个所谓的字符集。这样的字符集与其包含的字符都匹配,
例如'[pj]ython''python''jython'都匹配,但不与其他字符串匹配。你还可使用范围,
例如'[a-z]'与a~z的任何字母都匹配。你还可组合多个访问,方法是依次列出它们,
例如'[a-zA-Z0-9]'与大写字母、小写字母和
数字都匹配。请注意,字符集只能匹配一个字符。
要指定排除字符集,可在开头添加一个^字符,
例如'[^abc]'与除a、b和c外的其他任何字符都匹配。
(pattern)*:pattern可重复0、1或多次
 (pattern)+:pattern可重复1或多次
 (pattern){m,n}:模式可从父m~n次。
 w*:w可重复0、1或多次
 例如,r'w*\.python\.org''www.python.org'匹配,
 也与'.python.org''ww.python.org''wwwwwww.python.org'匹配。
同样,
r'w+\.python\.org''w.python.org'匹配,但与'.python. 
org'不匹配,
而r'w{3,4}\.python\.org'只与'www.python.org''wwww.python.org'匹配
w{3,4}:出现3次或者4次
^:尖尖符号,脱字符,^ht,以ht开头
$:要指定字符串末尾 it$结尾的字符串
'''
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    import re
    print_hi('nice day')
    str2 = 'a_b_c'
    str2a = str2.split('_')
    print(str2a)
    print(str2a[1])
    str2c = str2.replace('b', 'b1')
    print(str2c)
    b_ret = re.match('p', 'python')
    print('b_ret', b_ret)
    text1='a,,,, acdefg, ,  e3li'
    print(re.split('[, ]+',text1))
    print(re.split('o', 'foobar')) #以o进行分隔,o就不在了
    print(re.split('o(o)', 'foobar'))#以o进行分隔,插入o

    print(re.split('o(o)', 'foobar'))  # 以o进行分隔,插入o
    print('分隔1次:',re.split('[, ]+', text1, maxsplit=1))
    print('分隔2次:', re.split('[, ]+', text1, maxsplit=2))

    pattern = '[a-zA-Z]+'
    text = '"Hm... Err -- are you sure?" he said, sounding insecure.'
    print(re.findall(pattern, text))
    pattern2 = '[.?\-",]+'   #re.error: bad character range ?-" at position 2 , 横杠-符号要进行转义,\-
    print('查找满足条件:字母大小写:', re.findall(pattern2, text))

    pat='{name}'
    text ='dear {name}...'
    print(re.sub(pat,'mr,tt',text)) #函数re.sub从左往右将与模式匹配的子串替换为指定内容
    """
    re.escape是一个工具函数,用于对字符串中所有可能被视为正则表达式运算符的字符进行
    转义。使用这个函数的情况有:字符串很长,其中包含大量特殊字符,而你不想输入大量的反斜
    杠;你从用户那里获取了一个字符串(例如,通过函数input),想将其用于正则表达式中。下面
    的示例说明了这个函数的工作原理:
    
    """
    es2=re.escape('www.python.org') #添加反斜杠
    print(es2)
   # ' www\\.python\\.org'
    es3=re.escape('But where is the ambiguity歧义,模棱两可?')
    print(es3)
    #'But\\ where\\ is\\ the\\ ambiguity\\?'
    #通过编组提取感兴趣的内容
    m = re.match(r'www\.(.*)\..{3}', 'www.python.org')
    print('提取字符串内容:m.group(1):', m.group(1)) #group(0)是整个字符串
   # 'python'
    print(m.start(1))# python的开始位置
   # 4
    print(m.end(1))# python的结束位置
   # 10
    print(m.span(1)) # python的开始与结束位置 #(4, 10)

    #. 替换中的组号和函数
    emphasis_pattern = r'\*([^\*]+)\*' #SyntaxError: EOL while scanning string literal,单引号中文输入法就会报错
    print(re.sub(emphasis_pattern, r'<em>\1</em>', 'hi,*abcdefg*'))#用指定内容替换复合条件的字段,*开头*结尾, [^\*]是字符集,表示不包含*号,\1是编组,替换的位置

    print('脱字符吗?\\')

    print('提取ab开头,cd结尾的字符串')
    pattern2a = '^ab(.+)cd$'
    m2 =re.match(pattern2a, 'abgoodcd')
    print(m2)
    print(m2.group(1))
    if m2.group(1) == 'good':
        print('find:', m2.group(1))
    mail_content ='From: Fto Fiye <fto@163.com> nice'
    mail_content5 = 'From: Fto Fiye <fto@163.com>'
    pattern2b = 'From: (.*)<.*?>.*'  # .*任何字符结尾
    pattern5 = 'From: (.*)<.*?>$'   # >结尾
    m2a = re.match(pattern2b, mail_content)
    print('m2a:', m2a)
    print('提取发件人:', m2a.group(1))

#方法2:
    compile_pa = re.compile(pattern2b)  #创建模式对象
    m2c = compile_pa.match(mail_content)
    print('m2c:', m2c)

    m5 = re.match(pattern5, mail_content5)
    print('m5:', m5)
    print('提取发件人demo2:', m5.group(1))

    text = '"Hm... Err -- are you sure?" he said, sounding insecure.'
    pattern2 = '[.?\-",]+'  # re.error: bad character range ?-" at position 2 , 横杠-符号要进行转义,\-
    print('查找满足条件:字母大小写:', re.findall(pattern2, text))

    mail_list = '123<aa2@163.com>acdef, 123123;<ba1@qq.com>acdef,;w8<aah@163.com>acdef,;dtg<ca@186.com>acdef,;jjdtg<qd@163.com>acdef,;jjtr'
    print('提取所有邮件地址')
    pattern6 = '^<.+'
    pattern6a = '[a-z]*[0-9]*@[a-z]*[0-9]*.com'  #匹配对象
    #print('msg:', re.search(pattern6a, mail_list))
    print('msg_search:', re.search(pattern6a, mail_list).group())  #只返回首次,第一次匹配的结果
    print('msg_find_all:', re.findall(pattern6a, mail_list))  # 返回所有匹配的结果
    print('msg_find_all_0:', re.findall(pattern6a, mail_list)[0])
    print('msg_find_all_1:', re.findall(pattern6a, mail_list)[1])



    #print('m6:', m6)
    #print('m6:', m6.group(1))





















# See PyCharm help at https://www.jetbrains.com/help/pycharm/

 

posted @ 2024-01-04 14:33  txwtech  阅读(222)  评论(0编辑  收藏  举报