正则表达式 笔记

1、re.compile(patternflags=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
posted @ 2019-04-28 16:31  yjy888  阅读(175)  评论(0)    收藏  举报