ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python-day16

2019-08-13 20:02:48  阅读:207  来源: 互联网

标签:qq 匹配 python re day16 print group match


一、正则表达式

regular expression -----regex 验证匹配
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。
在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。

方法:

match() 匹配 从头进行匹配 匹配不成功则返回None
fullmatch() 从头到尾 整个字符串跟pattern进行匹配 匹配不成功则返回None
search() 扫描整个字符串查找匹配正则格式的内容,找到返回Match

Match对象:
match.group() 匹配的内容
match.span() 匹配内容的位置

search: 只要在字符串中找到匹配的则不会继续查找
findall: 查找所有匹配的内容,返回值是一个列表

 

import re
# 通过re模块的compile函数,返回一个pattern对象
pattern = re.compile('abc')
# 通过pattern对象:match   search    findall split...
match_obj = pattern.match('abcsdfszzabc')
print(match_obj)
# 匹配对象调用group获取匹配的内容
g = match_obj.group()
print(g)

a = re.match('123a','123A3454365123A',re.I)
print(a)
b = a.group()
print(b)

a = re.fullmatch('aaa','AAA',re.I)
print(a)

b = re.search('abc','asdabcwrfsd',re.I)
print(b)

print(match_obj.group())   # 匹配的内容被取出来
print(b.span())     # 匹配内容的位置

字符 功能
.      匹配任意1个字符(除了\n)
[ ]    匹配[ ]中列举的字符
\d    匹配数字,即0-9
\D   匹配非数字,即不是数字
\s    匹配空白,即 空格,tab键
\S   匹配非空白
\w   匹配单词字符,即a-z、A-Z、0-9、_(下划线)
\W     匹配非单词字符

*      配前一个字符出现0次或者无限次,即可有可无
+     匹配前一个字符出现1次或者无限次,即至少有1次
?        匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m}       匹配前一个字符出现m次
{m,}      匹配前一个字符至少出现m次
{m,n}    匹配前一个字符出现从m到n次

^    匹配字符串开头
$    匹配字符串结尾
\b   匹配一个单词的边界
\B   匹配非单词边界

|         匹配左右任意一个表达式
(ab)         将括号中字符作为一个分组
\num       引用分组num匹配到的字符串
(?P<name>)   分组起别名
(?P=name)   引用别名为name分组匹配到的字符串

import re

s = 'asfghjdfghaxxyxbswabrjrtwegdasazzb'
m_obj = re.search('a[xyz]*b', s)
if m_obj:
    print(m_obj.group())
else:
    print('没有找到')

# 两头是数字,中间是字母
s = '1asd23sad4'
a = re.search('\d[a-z]+\d', s)
if a:
    print(a.group())
else:
    print('没有找到')

result = re.findall('\d[a-z]+\d', s)
print(result)  # ['1asd2', '3sad4']

# 验证qq号码
qq = input('请输入你的qq号码:')
a = re.fullmatch('[1-9]\d{5,10}', qq)
print(a)


# 方式二
qq = input('请输入你的qq号码:')
a = re.search('^[1-9]\d{5,10}$', qq)
print(a)

 注:在写正则表达式要在前面添加'r', raw

正则的替换:

sub 替换
sub(pattern,repl,str)
repl:可以str类型也可以是callable类型

s = 'sa   sadfa  sadf     sad'
a = re.sub(r'\s+', '#', s)
print(a)


s = 'xiaohua =20, xiaoming = 18   xiaofang = 21'


def change(mobj):
    print(mobj)
    content = mobj.group()
    result = str(int(content) + 1)
    return result


a = re.sub(r'\d+', change, s)
print(a)

 例子:

import re

username = input('请输入用户名:')
a = re.fullmatch('[a-zA-Z]\w{5,}',username)
if a:
    print(a.group())
else:
    print('没有找到!!!')


num1 = input('请输入手机号:')
a = re.fullmatch('(13|15|18)\d{9}',num1)   # 1[358]\d{9}
if a:
    print(a.group())
else:
    print('没有找到!!!')


num1 = input('请输入手机号:')
a = re.fullmatch('(\d{3}|\d{4})-\d{8}',num1)  # \d{3,4} - \d{8}
if a:
    print('合法!!!')
else:
    print('没有找到!!!')

num1 = 'I am a good boy , a handsome boy'
a = re.findall(r'\b[a-z]+\b',num1,re.I)  #
print(a)
View Code

贪婪与非贪婪:

'''
 贪婪与非贪婪:
 '''
s = 'abbbbbbbbbbbbbc'
a = re.match('ab+?',s)
print(a.group())

s = '<div>hello</div><div>world</div>'
a = re.match(r'<(?P<n>.+)>.+?</(?P=n)>',s)
print(a.group())
import re
s = 'hello jack,hello tom'
a = re.findall('(hello|hi) (jack|tom)',s,re.I)
print(a[1][1])
print(a)

# 邮箱:126,163,qq  而且必须符合邮箱的格式

email = input('请输入邮箱:')
a = re.search(r'^(\w{4,10})@(126|163|qq).com$',email)
if a:
    b = email_name = a.group(1)
    print('合法!!!',b)
else:
    print('不合法!!!')


# 1开头,不是以4、7结尾的手机号码(11位) 或者 010-34567897|0311-37647326
phone = input('请输入手机号或座机:')
a = re.search(r'(1\d{9}[0-35689])|(\d{3,4}-\d{8})',phone)
if a:
    print('合法!!!',phone)
else:
    print('不合法!!!')
View Code

 二、进程、线程

import time
from multiprocessing import Process

def program():
    for i in range(5):
        print('写代码%d行'%i)
        time.sleep(1)


def listen_music():
    musics = ['逆战','凉凉','麻婆豆腐','无地自容']
    for music in musics:
        print('正在听:{}歌'.format(music))
        time.sleep(1)

def weichat(user):
    name = '詹姆斯'
    for i in range(5):
        print('{}正在和{}聊天!!'.format(user,name))
        time.sleep(1)

if __name__ =='__main__':
    p1 = Process(target=program,name='进程1')
    p2 = Process(target=listen_music,name='进程2')
    # p3 = Process(target=weichat,args=['gang'])
    p3 = Process(target=weichat,name='进程3',kwargs={'user':'gang'})
    p1.start()
    p2.start()
    p3.start()
View Code

 

标签:qq,匹配,python,re,day16,print,group,match
来源: https://www.cnblogs.com/rungang/p/11348103.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有