python正则表达式匹配感叹号_python如何使用正则表达式的前向、后向搜索及前向搜索否定模式...

本文介绍了正则表达式中的前向搜索和否定模式,通过实例展示了如何使用这些模式来判断电子邮件地址是否包含特定模式,如在邮箱地址中排除"noreply"的情况。通过Python代码解释了正则表达式的匹配逻辑,并演示了匹配和不匹配的示例。
摘要由CSDN通过智能技术生成

前言

在许多的情况下,很多要匹配内容是一起出现,或者一起不出现的。比如《》,< >,这样的括号,不存在使用半个的情况。因此,在正则表达式里也有一致性的判断,要么两个尖括号一起出现,要么一个也不要出现。怎么样来实现这种判断呢?针对这种情况得引入新的正则表达式的语法:(?=pattern),这个语法它会向前搜索或者向后搜索相关内容,如果不会出现就不能匹配。不过,这个匹配不会消耗任何输入的字符,它只是查看一下。

例子如下:

#python 3.6

#蔡军生

#http://blog.csdn.net/caimouse/article/details/51749579

#

import re

address = re.compile(

'''''

# A name is made up of letters, and may include "."

# for title abbreviations and middle initials.

((?P

([w.,]+s+)*[w.,]+

)

s+

) # name is no longer optional

# LOOKAHEAD

# Email addresses are wrapped in angle brackets, but only

# if both are present or neither is.

(?= (<.>$) # remainder wrapped in angle brackets

|

([^]$) # remainder *not* wrapped in angle brackets

)

# optional opening angle bracket

# The address itself: username@domain.tld

(?P

[wd.+-]+ # username

@

([wd.]+.)+ # domain name prefix

(com|org|edu) # limit the allowed top-level domains

)

>? # optional closing angle bracket

''',

re.VERBOSE)

candidates = [

u'First Last ',

u'No Brackets first.last@example.com',

u'Open Bracket

u'Close Bracket first.last@example.com>',

]

for candidate in candidates:

print('Candidate:', candidate)

match = address.search(candidate)

if match:

print(' Name :', match.groupdict()['name'])

print(' Email:', match.groupdict()['email'])

else:

print(' No match')

结果输出如下:

Candidate: First Last

Name : First Last

Email: first.last@example.com

Candidate: No Brackets first.last@example.com

Name : No Brackets

Email: first.last@example.com

Candidate: Open Bracket

No match

Candidate: Close Bracket first.last@example.com>

No match

python里使用正则表达式的前向搜索否定模式

上面学习前向搜索或后向搜索模式(?=pattern),这个模式里看到有等于号=,它是表示一定相等,其实前向搜索模式里,还有不相等的判断。比如你需要识别EMAIL地址:noreply@example.com,这个EMAIL地址大多数是不需要回复的,所以我们要把这个EMAIL地址识别出来,并且丢掉它。怎么办呢?这时你就需要使用前向搜索否定模式,它的语法是这样:(?!pattern),这里的感叹号就是表示非,不需要的意思。比如遇到这样的字符串:noreply@example.com,它会判断noreply@是否相同,如果相同,就丢掉这个模式识别,不再匹配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值