赞
踩
特殊字符 | Value |
---|---|
. | (点) 在默认模式,匹配除了换行的任意字符。如果指定了标签 DOTALL ,它将匹配包括换行符的任意字符。 |
^ | (插入符号) 匹配字符串的开头, 并且在 MULTILINE 模式也匹配换行后的首个符号。 |
$ | 匹配字符串尾或者在字符串尾的换行符的前一个字符,在 MULTILINE 模式下也会匹配换行符之前的文本。 |
1. | 对它前面的正则式匹配0到任意次重复, 尽量多的匹配字符串。 |
+ | 对它前面的正则式匹配1到任意次重复。 |
? | 对它前面的正则式匹配0到1次重复。 |
*?, +?, ?? | ‘*’, ‘+’,和 ‘?’ 修饰符都是 贪婪的;它们在字符串进行尽可能多的匹配。 |
{m} | 对其之前的正则式指定匹配 m 个重复;少于 m 的话就会导致匹配失败。 |
{m,n} | 对正则式进行 m 到 n 次匹配,在 m 和 n 之间取尽量多。 |
{m,n}? | 前一个修饰符的非贪婪模式,只匹配尽量少的字符次数。 |
\ | 转义特殊字符 |
[] | 用于表示一个字符集合。 |
| | A|B,一旦 A 匹配成功, B 就不再进行匹配 |
(…) | (组合),匹配括号内的任意正则表达式,并标识出组合的开始和结尾。 |
(?…) | 这是个扩展标记法 (一个 ‘?’ 跟随 ‘(’ 并无含义)。 ‘?’ 后面的第一个字符决定了这个构建采用什么样的语法。 |
(?aiLmsux) | ( ‘a’, ‘i’, ‘L’, ‘m’, ‘s’, ‘u’, ‘x’ 中的一个或多个) 这个组合匹配一个空字符串; |
(?:…) | 正则括号的非捕获版本。 匹配在括号内的任何正则表达式,但该分组所匹配的子字符串 不能 在执行匹配后被获取或是之后在模式中被引用。 |
(?aiLmsux-imsx:…) | (‘a’, ‘i’, ‘L’, ‘m’, ‘s’, ‘u’, ‘x’ 中的0或者多个, 之后可选跟随 ‘-’ 在后面跟随 ‘i’ , ‘m’ , ‘s’ , ‘x’ 中的一到多个 .) 这些字符为表达式的其中一部分 设置 或者 去除 相应标记 |
(?P…) | (命名组合) |
(?P=name) | 反向引用一个命名组合;它匹配前面那个叫 name 的命名组中匹配到的串同样的字串。 |
(?#…) | 注释;里面的内容会被忽略。 |
(?=…) | 匹配 … 的内容,但是并不消费样式的内容。比如, Isaac (?=Asimov) 匹配 'Isaac ’ 只有在后面是 ‘Asimov’ 的时候。 |
(?!…) | 匹配 … 不符合的情况。 |
(?<=…) | 匹配字符串的当前位置,它的前面匹配 … 的内容到当前位置。 |
(?<!…) | 匹配当前位置之前不是 … 的样式。 |
(?(id/name)yes-pattern|no-pattern) | 如果给定的 id 或 name 存在,将会尝试匹配 yes-pattern ,否则就尝试匹配 no-pattern,no-pattern 可选,也可以被忽略。 |
import re
while True:
user_name = input('请输入用户名')
x = re.compile(r'^[a-zA-Z_-][\w-]{3,13}$')
if x.match(user_name):
print('成功输入用户名{}'.format(user_name))
break
else:
print('用户名不合法,请重输')
r'^[\w.-]+@[\w.-]\.[a-zA-z]{2,4}$'
r'^1\d{10}$'
a = 'ad234ds3dsf2'
print(re.sub(r'\d+', '0', a)) # 把数字替换成0
# 通过函数替换,把数字变成2倍
def Doub(x):
data = x.group()
return str(int(data) * 2)
print(re.sub(r'\d+', Doub, a))
# 或者用lambda表达式
print(re.sub(r'\d+', lambda x: str(int(x.group()) * 2), a))
a = 'ad234acv234dsf2345'
result = re.match(r'ad(.+)(\d+)', a)
print(result.group(1))
result1 = re.match(r'ad(.+)(.+)', a)
print(result1.group(1))
result2 = re.match(r'ad(\d+)(.+)', a)
print(result2.group(1))
python正则表达式默认贪婪模式(尽可能多的匹配)
a = 'ad234acv234dsf2345'
result = re.match(r'ad(.+?)(\d+)', a)
print(result.group(1))
result1 = re.match(r'ad(.{2,5}?)(.+)', a)
print(result1.group(1))
result2 = re.match(r'ad(\d+?)(.+)', a)
print(result2.group(1))
import re
def user_name():
while True:
name = input('请输入用户名')
if re.match(r'^[a-zA-z_]\w{5,15}$', name):
print('输入正确')
break
else:
print('输入不合法')
user_name()
import re
def pass_word():
while True:
p_word = input('请输入密码')
if re.fullmatch(r'[a-zA-z][^!@#¥%^&*]{5,11}', p_word):
print('输入正确')
break
else:
print('输入不合法')
pass_word()
陈XX Caoyan 6895 13811661805 caoyan@baidu.com
常XX Yu Cao 8366 13911404565 caoyu@baidu.com
柴XX Shirley Cao 6519 13683604090 caoyue@baidu.com
曹XX Cao Zheng 8290 13718160690 caozheng@baidu.com
查XX Zha Lingli 6259 13552551952 zhalingli@baidu.com
查XX Zha Shan 8580 13811691291 zhanshan@baidu.com
查XX Rachel 8825 13341012971 zhanyu@baidu.com
提取文件中所有的手机号和邮箱
import re file_name = r'H:\pythonProject\test' # 定义手机号提取规则 get_tel = re.compile(r'\d{11}') # 定义邮箱提取规则 get_mail = re.compile(r'\w+@baidu\.com') # 读取文件 with open(file_name, encoding='utf-8') as f: list1 = f.readlines() str_l = ' '.join(list1) print('所有电话号码是{}'.format(get_tel.findall(str_l))) print('所有邮箱是{}'.format(get_mail.findall(str_l)))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。