python 正则表达式 初级

python 正则表达式  r"(?<=str1).+?(?=str2)"

正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。

(?<=str1)

表示在此后的正则中,前面要匹配str1

(?=str2)

表示在此前的正则中,后面要匹配str2

这两个表达式表示的是条件,不是实际匹配正则的一部分

 

.’用于匹配除换行符(\n)之外的所有字符。

*’用于将前面的模式匹配0次或多次(贪婪模式,即尽可能多的匹配)

+’用于将前面的模式匹配1次或多次(贪婪模式)

‘?’用于将前面的模式匹配0次或1次(贪婪模式)

*?,+?,??’即上面三种特殊字符的非贪婪模式(尽可能少的匹配)。

^’用于匹配字符串的开始,即行首。

$’用于匹配字符串的末尾(末尾如果有换行符\n,就匹配\n前面的那个字符),即行尾。

{m,n}’用于将前面的模式匹配m次到n次(贪婪模式),即最小匹配m次,最大匹配n次。

{m,n}?’即上面‘{m,n}’的非贪婪版本。

\\’:'\'是转义字符,在特殊字符前面加上\,特殊字符就失去了其所代表的含义,比如\+就仅仅代表加号+本身。

‘[]’用于标示一组字符,如果^是第一个字符,则标示的是一个补集。比如[0-9]表示所有的数字,[^0-9]表示除了数字外的字符

|’比如A|B用于匹配A或B。

‘(...)’用于匹配括号中的模式,可以在字符串中检索或匹配我们所需要的内容。

 

p1 = r"(?<={0}).+?(?= \\n)".format('Undistort Flag: ')

    pattern1 = re.compile(p1)                         #编译这段正则表达式

    matcher1 = re.search(pattern1, output)  #在源文本中搜索符合正则表达式的部分

    rtv_lag = matcher1.group(0)

    print '~~~~~~~~`',rtv_lag

    return rtv_lag

 

python 正则表达式的学习

初级:

key = r"<h1>hello world<h1>"#源文本

p1 = r"<h1>.+<h1>"#我们写的正则表达式,下面会将为什么

pattern1 = re.compile(p1)

print pattern1.findall(key)#发没发现,我怎么写成findall了?咋变了呢?

 

findall返回的是所有符合要求的元素列表,包括仅有一个元素时,它还是给你返回的列表。

正则表达式

代表的匹配字符

[0-9]

0123456789任意之一

[a-z]

小写字母任意之一

[A-Z]

大写字母任意之一

\d

等同于[0-9]

\D

等同于[^0-9]匹配非数字

\w

等同于[a-z0-9A-Z_]匹配大小写字母、数字和下划线

\W

等同于[^a-z0-9A-Z_]等同于上一条取非

一些匹配不准确的例子

想要匹配@与.之间的ygomi:

 

key='aaaapiaoyu.qiu@ygomi.com.cn'

>>> p1=r"@.+\."

>>> pattern1=re.compile(p1

>>> pattern1.findall(key)

['@ygomi.com.']    却匹配到了更多的内容

>>> 

>>> p1=r"@.+?\."    增加?

>>> pattern1=re.compile(p1)

>>> pattern1.findall(key)

['@ygomi.']     

 

原因是正则表达式默认是“贪婪”的,“+”代表是字符重复一次或多次。但是我们没有细说这个多次到底是多少次。所以它会尽可能“贪婪”地多给我们匹配字符,在这个例子里也就是匹配到最后一个“.”。

我们怎么解决这种问题呢?只要在“+”后面加一个“?”就好了。加了一个“?”我们就将贪婪的“+”改成了懒惰的“+”。这对于[abc]+,\w*之类的同样适用。

 

准确控制控制重复次数:{a,b} 其中,a<=匹配次数<=b

举栗,我们有sas,saas,saaas,我们想要sas和saas

 

key = r"saas and sas and saaas"

p1 = r"sa{1,2}s"

pattern1 = re.compile(p1)

print pattern1.findall(key)

输出:['saas', 'sas']

 

如果你省略掉{1,2}中的2,那么就代表至少匹配一次,那么就等价于?

如果你省略掉{1,2}中的1,那么就代表至多匹配2次。

 

正则表达式里的元字符及其作用:

元字符

说明

.

代表任意字符

|

逻辑或操作符

[ ]

匹配内部的任一字符或子表达式

[^]

对字符集和取非

-

定义一个区间

\

对下一字符取非(通常是普通变特殊,特殊变普通)

*

匹配前面的字符或者子表达式0次或多次

*?

惰性匹配上一个

+

匹配前一个字符或子表达式一次或多次

+?

惰性匹配上一个

?

匹配前一个字符或子表达式0次或1次重复

{n}

匹配前一个字符或子表达式

{m,n}

匹配前一个字符或子表达式至少m次至多n次

{n,}

匹配前一个字符或者子表达式至少n次

{n,}?

前一个的惰性匹配

^

匹配字符串的开头

\A

匹配字符串开头

$

匹配字符串结束

[\b]

退格字符

\c

匹配一个控制字符

\d

匹配任意数字

\D

匹配数字以外的字符

\t

匹配制表符

\w

匹配任意数字字母下划线

\W

不匹配数字字母下划线



 

猜你喜欢

转载自www.cnblogs.com/mianbaoshu/p/12068720.html