ret = re.match(r"正则表达式", 需要处理的字符串)
# ret.group() # 如果匹配到则输出匹配到的数据
1、匹配单个字符
. 匹配任意一个字符(除了\n)
[] 匹配[]中列举的字符
\d 匹配数字,即0-9
\D 匹配非数字,即不是数字
\s 匹配空白,即空格、tab键
\S 匹配非空白
\w 匹配单词字符,即a-z、A-Z、0-9、_
\W 匹配非单词字符
[^0-9] 取非数字的任意一个字符
2、匹配多个字符
* 匹配前一个字符出现0次或者无限次,即可有可无
+ 匹配前一个字符出现1次或者无限次,即至少有1次
? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m} 匹配前一个字符出现m次
{m,n} 匹配前一个字符出现从m次到n次
re.match(r".*", html. re.S) # re.S让.包括\n
3、判断开头和结尾
^ 匹配字符串开头
$ 匹配字符串结尾
4、匹配分组
| 匹配左右任意一个表达式,或的意思
(ab) 将括号中字符作为一个分组 # re.match(r"", string).group(1) 表示取第一个括号的值
\num 引用分组num匹配到的字符串
(?P<name>) 分组起别名
(?P=name) 引用别名为name分组匹配到的字符串
re.match(r"<(?P<p1>\w*)>.*</(?P=p1)>", html_str).group()
# 如果在正则表达式中需要用到了某些普通的字符,比如.?等,仅仅需要在他们前面添加一个反斜杠进行转义
# re.match(r"", string).group(1) # 表示取第一个括号的值
# re.match(r"", string).group(2) # 表示取第二个括号的值
# re.match(r"<(\w*)>.*</\1>", html_str).group() \1表示取第一个括号的值
5、re模块的高级用法
search 不从头开始匹配,当匹配到一个字符跟它的正则相符时才开始
findall 找出满足正则的字符串,返回一个列表
# >>> re.findall(r"\d+", "python = 9000, c=7883,c++=15787")
['9000', '7883', '15787']
sub 将匹配到的数据进行替换
# >>> re.sub(r"\d+", '998', "python = 997, c=24554")
'python = 998, c=998'
split 根据匹配进行切割字符串,并返回一个列表
# >>> re.split(r":| ", "info:xiaokang 33 jinan")
['info', 'xiaokang', '33', 'jinan']
def add(temp):
num = temp.group()
num = int(num) + 1
return str(num)
# 先进行匹配,将匹配到的字符串作为add函数的参数传到add函数中,函数返回的值替换原来匹配到的字符串再输出
ret = re.sub(r"\d+", add, "python = 997")
print(ret)
输出 : python = 998
"""
#
# import re
#
# names = ["age", "_a?ge", "46_add", "___哈aee", "a56_", "jjj22", "a"]
# for name in names:
# ret = re.match(r"[a-zA-Z_][a-zA-Z_0-9]*$", name)
# if ret:
# print("%s是有效的变量名" % name)
# else:
# print("%s是无效的变量名" % name)
import re
# def main():
#
# string = input("请输入你的邮箱:")
# # 如果在正则表达式中需要用到了某些普通的字符,比如.?等,仅仅需要在他们前面添加一个反斜杠进行转义
# # re.match(r"", string).group(1) # 表示取第一个括号的值
# # re.match(r"", string).group(2) # 表示取第二个括号的值
# ret = re.match(r"^([a-zA-Z_0-9]){4,20}@(163|162)\.com$", string)
# # re.match(r"<(\w*)>.*</\1>", html_str).group() \1表示取第一个括号的值
# if ret:
# print("%s是163邮箱!" % string)
# else:
# print("%s不是163邮箱!" % string)