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/
欢迎讨论,相互学习。
cdtxw@foxmail.com