正则表达式 笔记
1、re.
compile
(pattern, flags=0)
将正则表达式的样式编译为一个 正则表达式对象 (正则对象),可以用于匹配,通过这个对象的方法 match()
, search()
以及其他如下描述。
这个表达式的行为可以通过指定 标记 的值来改变。值可以是以下任意变量,可以通过位的OR操作来结合( |
操作符)。
2、如何匹配多个多个字符串组,但是只替换其中一部分?
比如:string = 'print 123' 要匹配123,但是要把123前后都变成 'print(123)'
3、常用的正则表达式
英文字符 r = r'[a-zA-Z]'
数字 r = r'[0-9]'
中文 r = r'[\u4e00-\u9fa5]' #只有汉字,没有中文符号
标点符号 r = r'[’!"#$%&\'*+,-./:;<=>?@,。?★、…【】《》?“”‘’![\\]^_`{}~'
方括号里面加^表示匹配除了方括号,以外的字符
r = r'[a-zA-Z]+'表示匹配多个这个字符
r = r'[a-zA-Z]{2}'表示匹配多个这个字符2次
如果是r = r'[a-zA-Z]{2,}'表示匹配多个这个字符2次及以上
\w匹配 字母、数字、下划线 就是\加一个什么东西都是有特定含义的,否则就要用r表明没有转移字符
\W非。。。
\s 匹配人意空白字符
$ 匹配字符串的末尾
^ 匹配字符串开头
注意!!!
|在正则表达式里是有特殊含义的,所以不要使用|进行分割
如果使用|进行分割,则正则表达式里不应该含有|
# -*- coding: utf-8 -*-
import re
a = '我知道,abc,你不懂我'
#去除|之后的中文
r = '(.*?),([a-zA-Z,]+)([\u4e00-\u9fa5]+)'
# r = r'(.*?)|(.*?)'
result = re.sub(r, r'\1 \3', a)
print(result)
#########
re.sub本质是:
1、匹配一个正则,并将匹配到的进行替换,如果没有匹配到,则会没有替换的进行返回
2、如果正则表达式里有分组,就可以提取出分组进行处理,注意,使用分组的时候一定要加r''
=============================
.*和.*?的区别
re.findall('.*at',b)
Out[147]: ['cat, pet, gap, pat']
re.findall('.*?at',b)
Out[148]: ['cat', ', pet, gap, pat']
.* 匹配的时候,尽量长, 所以匹配一整个字符串,这个是最长。称之为贪婪匹配
而.*?匹配的时候尽量短,称之为懒惰匹配.
. 是匹配除了换行符意外的所有字符
* 对前面的正则表达式匹配0次或任意次重复,且尽可能长
+对前面的正则表达式匹配1词或以上
?对前面的正则匹配0次或1次
但是?还有另外一个意思,就是用来修饰*,+,和?
原本的*+?都是贪婪的,如果加了?进行修饰,就变成非贪婪的
======特殊字符=========
有没有哪些字符串不适合写在正则表达式里进行匹配?
有!
有些字符,比如 '|'
或者 '('
,属于特殊字符。 特殊字符既可以表示它的普通含义, 也可以影响它旁边的正则表达式的解释。
|表示或
()表示分组
如果不想要特殊的含义,就使用\进行进行转码
===========常用正则表达式============
http://ling.cuc.edu.cn/RawPub/cyzzs.aspx
========判断是否能找到某个表达式==========
search = False
if re.search(r'A|Q|W|-|参考|设置|q', decoded_sentence):
search = True