正则表达式

  1 import re
  2 
  3 res = r"速度[1-8a-zA-Z]"  # 1...8 a...z A...Z
  4 result = re.match(res, "速度z")
  5 print(result)
  6 # 匹配出的数据
  7 print(result.group())
  8 
  9 import re
 10 
 11 res = r"速度\w"  # 0...9 a...z A...Z 所有汉字
 12 result = re.match(res, "速度哈哈")
 13 print(result)
 14 # 匹配出的数据
 15 print(result.group())
 16 
 17 res = r"速度\W\d"  # 非单词字符
 18 result = re.match(res, "速度,1")
 19 print(result)
 20 # 匹配出的数据
 21 print(result.group())
 22 
 23 res = r"速度\s\d"  # 空格 tab键 0..9
 24 result = re.match(res, "速度\t1")
 25 print(result)
 26 # 匹配出的数据
 27 print(result.group())
 28 
 29 res = r"速度\S\d"  # 大写的S匹配非空白
 30 result = re.match(res, "速度啦1")
 31 print(result)
 32 # 匹配出的数据
 33 print(result.group())
 34 
 35 res = r"速度."  # 通配符,匹配任意
 36 result = re.match(res, "速度#")
 37 print(result)
 38 # 匹配出的数据
 39 print(result.group())
 40 
 41 res = r"速度\d{1,2}"  # 匹配指定位数1到2位
 42 result = re.match(res, "速度19")
 43 print(result)
 44 # 匹配出的数据
 45 print(result.group())
 46 
 47 res = r"\d{11}"  # 匹配连续11位的数字
 48 result = re.match(res, "13500000000")
 49 print(result)
 50 # 匹配出的数据
 51 print(result.group())
 52 res = r"a{11}"  # 匹配一个字符出现多少次
 53 result = re.match(res, "aaaaaaaaaaa")
 54 print(result)
 55 # 匹配出的数据
 56 print(result.group())
 57 
 58 res = r"\d{3,4}-?\d{7,8}"  # ?匹配前面那个可有可无
 59 # result = re.match(res, "028-12345678")
 60 result = re.match(res, "0531-12345678")
 61 print(result)
 62 # 匹配出的数据
 63 print(result.group())
 64 
 65 html = """qwert\nasdfg"""
 66 res = r".*"  #  匹配出现0次或无限次  *除了\n都能匹配
 67 result = re.match(res, html)
 68 print(result)
 69 
 70 html = """qwert\nasdfg\nzxcvb"""
 71 res = r".*"  # *除了\n都能匹配
 72 result = re.match(res, html, re.S)  # re.s匹配出\n的所有数据
 73 print(result)
 74 
 75 str1 = """qwertasdfgzxcvb"""
 76 res = r".+"  # 匹配出现1次或无限次
 77 result = re.match(res, str1)  # re.s匹配出\n的所有数据
 78 print(result)
 79 
 80 判断变量是否合法
 81 
 82 import re
 83 
 84 
 85 def main():
 86    names = ["name1", "_name", "str!", "__main__", "1name", "_age_1", "a#123"]
 87    res = r"^[a-zA-Z_][a-zA-Z0-9_]*$"
 88 
 89    for name in names:
 90       ret = re.match(res, name)
 91       if ret:
 92          print("变量名:%s 符合要求" % ret.group())
 93       else:
 94          print("变量名:%s 不符合要求" % name)
 95 
 96 
 97 if __name__ == '__main__':
 98    main()
 99 
100 邮箱验证
101 
102 import re
103 
104 email = [
105    'ronle@163.com',
106    '441030517@QQ..com',
107    '119941779@qq,com',
108    '5579001QQ@.COM',
109    '1107531656@q?q?.com',
110    '654088115@@qq.com',
111    '495456580@qq@139.com',
112    '279985462@qq。com.cn',
113    'chen@foxmail.com)m',
114    '2990814514@QQ.COM',
115    'xxxxxxxxx@_.com.cn',
116    'xxxxxxxxx@wwew_163sadasdf.com.cn'
117 ]
118 # 使用到普通字符,需要加一个转义符 \
119 res = r"^[a-zA-Z0-9_-]+@[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+$"
120 
121 for e in email:
122    ret = re.match(res, e)
123    if ret:
124       print("%s 是合法的邮箱地址" % ret.group())
125 
126 匹配分组
127 
128 import re
129 
130 email = [
131    'ronle@163.com',
132 ]
133 
134 # 匹配分组只通过163 126信箱
135 res = r"^([a-zA-Z0-9_-]+)@(163|126)+(\.[a-zA-Z0-9]+)+$"
136 
137 for e in email:
138    ret = re.match(res, e)
139    if ret:
140       # 取出分组group(1)匹配 ronle
141       print("%s 是用户名" % ret.group(1))
142       # 取出分组group(2)匹配 163
143       print("%s 是合法的邮箱地址" % ret.group(2))
144 
145 
146 import re
147 
148 html_str = "<p>hello</p>"
149 html_str2 = "<body><p>hello</p></body>"
150 
151 # \1 等值于分组(\w*) 转换下就是 <\w*>.*</\w*>
152 res = r"<(\w*)>.*</\1>"
153 res2 = r"<(\w*)><(\w*).*</\2></\1>"
154 
155 ret = re.match(res, html_str)
156 ret2 = re.match(res2, html_str2)
157 print(ret.group())
158 print(ret2.group())
159 
160 分组别名 (给分组定义个变量)
161 
162 import re
163 
164 html_str = "<body><p>hello</p></body>"
165 res = r"<(?P<p1>\w*)><(?P<p2>\w*).*</(?P=p2)></(?P=p1)>"
166 
167 ret = re.match(res, html_str)
168 
169 print(ret.group())
170 
171 search  findall sub
172 
173 import re
174 
175 # 查找
176 ret = re.search(r"\d+", "下阅读量9999")
177 print(ret.group())  # 9999
178 
179 # 查找全部
180 ret = re.findall(r"\d+", "阅读量9999,下载量9123")
181 print(ret)  # ['9999', '9123']
182 
183 # 替换
184 ret = re.sub(r"\d+", "777", "阅读量9999,下载量9123")
185 print(ret)  # 阅读量777,下载量777
186 
187 
188 支持函数替换
189 
190 def add_num(temp):
191    num = temp.group()
192    result = int(num) + 1
193    return str(result)
194 
195 
196 # 替换
197 ret = re.sub(r"\d+", add_num, "阅读量9999,下载量9123")
198 print(ret)  # 阅读量10000,下载量9124
199 
200 # 切割
201 ret = re.split(r":| ", "name:cheng beyond")
202 print(ret)  # ['name', 'cheng', 'beyond']
import re

a = """
<link title="RSS" type="application/rss+xml" rel="alternate" href="https://www.cnblogs.com/ronle/rss"/> 
"""
ret = re.findall('link title="RSS" type="(.+?)" rel', a, re.S)
print(ret)  # ['application/rss+xml']

 JS版

/**
 * 正则提取需要的字符串 1
 * */
let str = `<link title="RSS" type="application/rss+xml" rel="alternate" href="https://www.cnblogs.com/ronle/rss"/>`;
let reg = `link title="RSS" type="(.+?)" rel`
let index = str.search(reg);
let ret;
if (index === 1) {
  ret = str.match(reg)[index]; // application/rss+xml
}


/**
 * 正则提取需要的字符串 2 全局搜索(推荐)
 * */
let reg = /link title="RSS" type="(.+?)" rel/gi
let str = `<link title="RSS" type="application/rss+xml" rel="alternate" href="https://www.cnblogs.com/ronle/rss"/>`
let n = reg.exec(str)
console.log(n[n.index]) // application/rss+xml

 

posted @ 2018-12-05 13:56  ronle  阅读(189)  评论(0编辑  收藏  举报