pythonre正则匹配
Ⅰ python正则表达式之re.match()
我们在面对生物数据,比如序列信息(比如碱基序列、氨基酸序列等)的时候, 会时常要问,这其中是否包含着且含有多少某种已知的模式,一段DNA中是否包含转录起始特征TATA box、一段RNA中是否包含某种lncRNA、一段肽链中是否包含锌指结构等等;另一方面,我们在操作数据时,会时常遇到诸如把某个字符(对象)换成另一种字符(对象)的替换操作,而其本质还是如何搜索符合某种(替换)模式的对象。
在这些几乎天天都可以碰到的 模式匹配/搜索问题中,正则表达式就是一把解决问题的利剑!
在Python的re模块中,常用的有四个方法(match、search、findall、finditer)都可以用于匹配字符串,今天我们先来了解一下re.match()。
re.match()必须从字符串开头匹配! match方法尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。主要参数如下:
举个栗子来理解一下它的用法:
运行结果:
从例子中我们可以看出,re.match()方法返回一个匹配的对象,而不是匹配的内容。通过调用span()可以获得匹配结果的位置。而如果从起始位置开始没有匹配成功,即便其他部分包含需要匹配的内容,re.match()也会返回None。
一般一个小括号括起来就是一个捕获组。我们可以使用group()来提取每组匹配到的字符串。
group()会返回一个包含所有小组字符串的元组,从 0 到 所含的小组号。
直接调用groups()则直接返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
再举一个栗子:
运行结果:
Ⅱ Python常用的正则表达式处理函数详解
正则表达式是一个特殊的字符序列,用于简洁表达一组字符串特征,检查一个字符串是否与某种模式匹配,使用起来十分方便。
在Python中,我们通过调用re库来使用re模块:
import re
下面介绍Python常用的正则表达式处理函数。
re.match函数
re.match 函数从字符串的起始位置匹配正则表达式,返回match对象,如果不是起始位置匹配成功的话,match()就返回None。
re.match(pattern, string, flags=0)
pattern:匹配的正则表达式。
string:待匹配的字符串。
flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。具体参数为:
re.I:忽略大小写。
re.L:表示特殊字符集 w, W, , B, s, S 依赖于当前环境。
re.M:多行模式。
re.S:即 . ,并且包括换行符在内的任意字符(. 不包括换行符)。
re.U:表示特殊字符集 w, W, , B, d, D, s, S 依赖于 Unicode 字符属性数据库。
re.X:为了增加可读性,忽略空格和 # 后面的注释。
import re #从起始位置匹配 r1=re.match('abc','abcdefghi') print(r1) #不从起始位置匹配 r2=re.match('def','abcdefghi') print(r2)运行结果:
其中,span表示匹配成功的整个子串的索引。
使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
group(num):匹配的整个表达式的字符串,group() 可以一次输入多个组号,这时它将返回一个包含那些组所对应值的元组。
groups():返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
import re s='This is a demo' r1=re.match(r'(.*) is (.*)',s) r2=re.match(r'(.*) is (.*?)',s) print(r1.group()) print(r1.group(1)) print(r1.group(2)) print(r1.groups()) print() print(r2.group()) print(r2.group(1)) print(r2.group(2)) print(r2.groups())运行结果:
上述代码中的(.*)和(.*?)表示正则表达式的贪婪匹配与非贪婪匹配。
re.search函数
re.search函数扫描整个字符串并返回第一个成功的匹配,如果匹配成功则返回match对象,否则返回None。
re.search(pattern, string, flags=0)
pattern:匹配的正则表达式。
string:待匹配的字符串。
flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
import re #从起始位置匹配 r1=re.search('abc','abcdefghi') print(r1) #不从起始位置匹配 r2=re.search('def','abcdefghi') print(r2)运行结果:
使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
group(num=0):匹配的整个表达式的字符串,group() 可以一次输入多个组号,这时它将返回一个包含那些组所对应值的元组。
groups():返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
import re s='This is a demo' r1=re.search(r'(.*) is (.*)',s) r2=re.search(r'(.*) is (.*?)',s) print(r1.group()) print(r1.group(1)) print(r1.group(2)) print(r1.groups()) print() print(r2.group()) print(r2.group(1)) print(r2.group(2)) print(r2.groups())运行结果:
从上面不难发现re.match与re.search的区别:re.match只匹配字符串的起始位置,只要起始位置不符合正则表达式就匹配失败,而re.search是匹配整个字符串,直到找到一个匹配为止。
re.compile 函数
compile 函数用于编译正则表达式,生成一个正则表达式对象,供 match() 和 search() 这两个函数使用。
re.compile(pattern[, flags])
pattern:一个字符串形式的正则表达式。
flags:可选,表示匹配模式,比如忽略大小写,多行模式等。
import re #匹配数字 r=re.compile(r'd+') r1=r.match('This is a demo') r2=r.match('This is 111 and That is 222',0,27) r3=r.match('This is 111 and That is 222',8,27) print(r1) print(r2) print(r3)运行结果:
findall函数
搜索字符串,以列表形式返回正则表达式匹配的所有子串,如果没有找到匹配的,则返回空列表。
需要注意的是,match 和 search 是匹配一次,而findall 匹配所有。
findall(string[, pos[, endpos]])
string:待匹配的字符串。
pos:可选参数,指定字符串的起始位置,默认为0。
endpos:可选参数,指定字符串的结束位置,默认为字符串的长度。
import re #匹配数字 r=re.compile(r'd+') r1=r.findall('This is a demo') r2=r.findall('This is 111 and That is 222',0,11) r3=r.findall('This is 111 and That is 222',0,27) print(r1) print(r2) print(r3)运行结果:
re.finditer函数
和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
re.finditer(pattern, string, flags=0)
pattern:匹配的正则表达式。
string:待匹配的字符串。
flags:标志位,用于控制正则表达式的匹配方式,如是否区分大小写,多行匹配等。
import re r=re.finditer(r'd+','This is 111 and That is 222') for i in r: print (i.group())运行结果:
re.split函数
将一个字符串按照正则表达式匹配的子串进行分割后,以列表形式返回。
re.split(pattern, string[, maxsplit=0, flags=0])
pattern:匹配的正则表达式。
string:待匹配的字符串。
maxsplit:分割次数,maxsplit=1分割一次,默认为0,不限次数。
flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等。
import re r1=re.split('W+','This is 111 and That is 222') r2=re.split('W+','This is 111 and That is 222',maxsplit=1) r3=re.split('d+','This is 111 and That is 222') r4=re.split('d+','This is 111 and That is 222',maxsplit=1) print(r1) print(r2) print(r3) print(r4)运行结果:
re.sub函数
re.sub函数用于替换字符串中的匹配项。
re.sub(pattern, repl, string, count=0, flags=0)
pattern:正则中的模式字符串。
repl:替换的字符串,也可为一个函数。
string:要被查找替换的原始字符串。
count:模式匹配后替换的最大次数,默认0表示替换所有的匹配。
import re r='This is 111 and That is 222' # 删除字符串中的数字 r1=re.sub(r'd+','',r) print(r1) # 删除非数字的字符串 r2=re.sub(r'D','',r) print(r2)运行结果:
到此这篇关于Python常用的正则表达式处理函数详解的文章就介绍到这了,希望大家以后多多支持!
Ⅲ python re 正则匹配某类字符前的所有字符(不包括该类字符)
首先,“匹配除2012这个字符串以外的任意字符?”语义不明,你是想将其从原字符串中删除还是要匹配2012以外的年份?
姑且认为你的意思是后者,也即在一个特定模式里排除某些匹配的实例。
方法一、先预处理,将要匹配的字符串里的2012替换成不可能出现的字符串,然后再进行匹配处理,最后再将其替换回2012。
方法二、使用不匹配的前向断言 (?! ...):
import re
s = '....<b>0033<b> <b>1033<b> <b>2012<b> <b>2033<b> <b>2043<b> <b>3033<b>.....'
p = re.compile('<b>(?!2012)[0-9]{4}<b>')
for m in re.finditer(p, s):
print m.group()
可以匹配出
<b>0033<b>
<b>1033<b>
<b>2033<b>
<b>2043<b>
<b>3033<b>
而没有'<b>2012<b>'
Ⅳ 强烈推荐!Python 这个宝藏库 re 正则匹配
Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作。
在文本解析、复杂字符串分析和信息提取时是一个非常有用的工具 ,下面总结了 re 模块的常用方法。
d 匹配所有的十进制数字 0-9
D 匹配所有的非数字,包含下划线
s 匹配所有空白字符(空格、TAB等)
S 匹配所有非空白字符,包含下划线
w 匹配所有字母、汉字、数字 a-z A-Z 0-9
W 匹配所有非字母、汉字、数字,包含下划线
备注迹凳:符号.* 贪婪,符号.*? 非贪婪
[abc]:能匹配其中的单个字符
[a-z0-9]:能匹配指定范围的字符,可取反(在最前面加入^)
[2-9] [1-3]:能够做组合匹配
4.{ }:用于标记前面的字符出现的频率,有如下情况:
{n,m}:代表前面字符最少出现n次,最多出现m次
{n,}:代表前面字符最少出现n次,最多不受限制
{,m}:代表前面字符最多出现n次,最少不受限制
{n}:前面的字符必须出现n次
字符串中有反斜杠的,需要对反斜杠做转义
():分组字符,可以为匹配到的内容分组,快速获取到分组中的数据 在正则里面 "()" 代表的是分组的意思,一个括号代表一个分组,你只能匹配到 "()" 中的内容。
group:用于查看指定分组匹配到的内容
groups:返回一个元组,组内为所有匹配到的内容
groupdict:返回一个字典,包含分组的键值对,需要为分组命名
作用:可以将字符串匹配正则表达式的部分割开并返回一个列表
flags定义包括:
re.I:忽略大小写
re.L:表示特殊字符集 w, W, b, B, s, S 依赖于当前环境
re.M:多行模式
re.S:’.’并且包括换行符在内的任意字符(注意:’.’不包括换行符)
re.U:表示特殊字符集 w, W, b, B, d, D, s, S 依赖于 Unicode 字符属性数据库
在 Python 中使用正耐孙则表达式之前,先使用以下命令导入 re 模块
例如:
‘(d)(a)1’ 表示:匹配第一是数字,第二是字符a,第三 1 必须匹配第一个一样的数字重复一次姿亩旅,也就是被引用一次。
如 “9a9” 被匹配,但 “9a8” 不会被匹配,因为第三位的 1 必须是 9 才可以。
‘(d)(a)2’ 表示:匹配第一个是一个数字,第二个是a,第三个 2 必须是第二组()中匹配一样的。
如 “8aa” 被匹配,但 “8ab”,“7a7” 不会被匹配,第三位必须是第二组字符的复制版,也是就引用第二组正则的匹配内容。
Ⅳ Python中正则表达式的匹配规则总结
其他关于Python的总结文章请访问: https://www.jianshu.com/nb/47435944
正则表达式用来匹配字符串,在python中可以使用 re 模块来完成,本篇做一个对正则表达式的匹配规则的总结
在上述的精确匹配后可以跟上一些符号来进行模糊的匹配:
可以使用中括号的形式进行范围匹配,中括号表达式后边可以跟上上述模糊匹配的符号来表示数量
多个条件可以 紧跟着写在同一个中括号中 ,比如:
[a-zA-Z] :匹配一个大、小写字母
Ⅵ python正则表达式匹配
import re
print(re.findall(r"[12|22]+3", "123223"))
Ⅶ 趣玩Python第16关:3个技巧掌握正则
字符串的匹配查询
Python中的re模块中的findall函数可以对指定的字符串进行遍历匹配,如下:
findall(pattern, string, flags=0)
pattern:指定需要匹配的正则表达式。
string:指定待处理的字符串。
flags:指定匹配模式,常用的值可以是re.I、re.M、re.S和re.X。re.I的模式是让正则表达式对大小写不敏感;re.M的模式是让正则表达式可以多行匹配;re.S的模式指明正则符号.可以匹配任意字符,包括换行符 ;re.X模式允许正则表达式可以写得更加详细,如多行表示、忽略空白字符、加入注释等。
字符串的匹配替换
re模块中的sub函数的功能是替换,类似于字符串的replace方法,该函数根据正则表达式把满足匹配的内容替换为repl,如下:
sub(pattern, repl, string, count=0, flags=0)
pattern:同findall函数中的pattern。
repl:指定替换成的新值。
string:同findall函数中的string。
count:用于指定最多替换的次数,默认为全部替换。
flags:同findall函数。
字符串的匹配分割
re模块中的split函数是将字符串按照指定的正则表达式分隔开,类似于字符串的split,如下:
split(pattern, string, maxsplit=0, flags=0)
pattern:同findall函数中的pattern。
maxsplit:用于指定最大分割次数,默认为全部分割。
string:同findall函数中的string。
flags:同findall函数中的flags。
以上就是本次分享的全部内容了,不知大家对我讲述的Python正则表达式妙用感觉怎么样?
脑筋急转弯:有人想喝点牛奶解渴,却一命呜呼了,为什么?
Ⅷ Python正则表示式的几种匹配用法
Python正则表示式的几种匹配用法
下面列出: 1.测试正则表示式是否匹配字串的全部或部分regex=ur"" #正则表示式
if re.search(regex, subject): do_something()else: do_anotherthing() 2.测试正则表示式是否匹配整个字串 regex=ur"/Z" #正则表示式末尾以/Z结束
if re.match(regex, subject): do_something()else: do_anotherthing() 3.建立一个匹配物件,然后通过该物件获得匹配细节(Create an object with details about how the regex matches (part of) a string) regex=ur"" #正则表示式
match = re.search(regex, subject)if match: # match start: match.start() # match end (exclusive): atch.end() # matched text: match.group() do_something()else: do_anotherthing() 4.获取正则表示式所匹配的子串(Get the part of a string matched by the regex) regex=ur"" #正则表示式
match = re.search(regex, subject)if match: result = match.group()else: result ="" 5. 获取捕获组所匹配的子串(Get the part of a string matched by a capturing group) regex=ur"" #正则表示式
match = re.search(regex, subject)if match: result = match.group(1)else: result ="" 6. 获取有名组所匹配的子串(Get the part of a string matched by a named group) regex=ur"" #正则表示式
match = re.search(regex, subject)if match:result = match.group"groupname")else:result = "" 7. 将字串中没塌所有匹配的子串放入阵列中(Get an array of all regex matches in a string) result = re.findall(regex, subject) 8.遍历所有匹配的子串(Iterate over all matches in a string) for match in re.finditer(r"<(.*?)/s*.*?1>", subject) # match start: match.start() # match end (exclusive): atch.end() # matched text: match.group() 9.通过正则表示式字串建立一个正则表示式物件(Create an object to use the same regex for many operations) reobj = re.pile(regex) 10.用法1的正则表示式物件版本(use regex object for if/else branch whether (part of) a string can be matched) reobj = re.pile(regex)if reobj.search(subject): do_something()else: do_anotherthing() 11.用法2的正则表示式物件版本(use regex object for if/else branch whether a string can be matched entirely) reobj = re.pile(r"/Z") #差旅正则表示式末尾枯庆圆以/Z 结束
if reobj.match(subject): do_something()else: do_anotherthing() 12.建立一个正则表示式物件,然后通过该物件获得匹配细节(Create an object with details about how the regex object matches (part of) a string) reobj = re.pile(regex) match = reobj.search(subject)if match: # match start: match.start() # match end (exclusive): atch.end() # matched text: match.group() do_something()else: do_anotherthing() 13.用正则表示式物件获取匹配子串(Use regex object to get the part of a string matched by the regex) reobj = re.pile(regex) match = reobj.search(subject)if match: result = match.group()else: result ="" 14.用正则表示式物件获取捕获组所匹配的子串(Use regex object to get the part of a string matched by a capturing group) reobj = re.pile(regex) match = reobj.search(subject)if match: result = match.group(1)else: result ="" 15.用正则表示式物件获取有名组所匹配的子串(Use regex object to get the part of a string matched by a named group) reobj = re.pile(regex) match = reobj.search(subject)if match: result = match.group("groupname")else: result ="" 16.用正则表示式物件获取所有匹配子串并放入阵列(Use regex object to get an array of all regex matches in a string) reobj = re.pile(regex) result = reobj.findall(subject) 17.通过正则表示式物件遍历所有匹配子串(Use regex object to iterate over all matches in a string) reobj = re.pile(regex)for match in reobj.finditer(subject): # match start: match.start() # match end (exclusive): match.end() # matched text: match.group()字串替换 1.替换所有匹配的子串 #用newstring替换subject中所有与正则表示式regex匹配的子串
result = re.sub(regex, newstring, subject) 2.替换所有匹配的子串(使用正则表示式物件) reobj = re.pile(regex) result = reobj.sub(newstring, subject) 字串拆分 1.字串拆分 result = re.split(regex, subject) 2.字串拆分(使用正则表示式物件) reobj = re.pile(regex) result = reobj.split(subject)
两种:
1.
m = re.match(r'匹配条件', '待匹配内容')
2.
pattern = re.pile(r'匹配条件')m = pattern.match('待匹配内容')
正则表示式 简单的匹配
(=([0-9.]+[,]*)+)
正则表示式的具体用法
这个吧最好找本书看看,一两句话也说不明白,做验证啊什么的用它就行
正则表示式 匹配问好星号
在什么语言中用的?
一般都是前面加个“”反斜杠即 ?
在java中用字串是特殊字符所以String reg="\?"这样可以匹配一个 “?”问号.
java 正则表示式 abcded 匹配b出来
public class FillUtil {
public static void main(String[] args){
String item = "a:b: c:d:e";
Pattern pattern = Pattern.pile("\w:\w?");
Matcher matcher = pattern.matcher(item);
while(matcher.find()){
String find = matcher.group();
String[] finds = find.split(":");
for(String each:finds){
System.out.println(each);
}
System.out.println("_");
}
}
}
以下正则表示式有匹配吗?
应该没有吧,把sS都排出了,那不就没东西了吗?
注意,[]中的^表示反义。
能匹配以下正则表示式的内容?
什么都不能匹配。
用python正则表示式匹配java方法定义怎么写
1
2
3
4
5
6
7
8
9
10
>>> str_ = 'a100b30 :aa./aaaa.
' # 'str'是内建方法,不宜做变数名
>>> import re
>>> re_str = '.* (.*)
'
>>> re_pat = re.pile(re_str)
>>> search_ret = re_pat.search(str_)
>>> if search_ret:
search_ret.groups()
Ⅸ Python正则表达式的几种匹配方法
1.测试正则表达式是否匹配字符串的全部或部分
regex=ur"" #正则表达式
if re.search(regex, subject):
do_something()
else:
do_anotherthing()
2.测试正则表达式是否匹配整个字符串
regex=ur"/Z" #正则表达式末尾以/Z结束
if re.match(regex, subject):
do_something()
else:
do_anotherthing()
3.创建一个匹配对象,然后通过该对象获得匹配细节(Create an object with details about how the regex matches (part of) a string)
regex=ur"" #正则表达式
match = re.search(regex, subject)
if match:
# match start: match.start()
# match end (exclusive): atch.end()
# matched text: match.group()
do_something()
else:
do_anotherthing()
4.获取正则表达式所匹配的子串(Get the part of a string matched by the regex)
regex=ur"" #正则表达式
match = re.search(regex, subject)
if match:
result = match.group()
else:
result = ""