Products
GG网络技术分享 2025-03-18 16:15 1
怎样使用正则表达式匹配合法的邮件地址?
s=‘’‘xiasd@163.com,
sdlfkj@.com,
sdflkj@180.com,
solodfdsf@123.com,
sdlfjxiaori@139.com,
saldkfj.com,
oisdfo@.sodf.com.com’‘’
import re
s = '''xiasd@163.com,
sdlfkj@.com,
sdflkj@180.com,
solodfdsf@123.com,
sdlfjxiaori@139.com,
saldkfj.com,
oisdfo@.sodf.com.com'''pattern = r"\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*"for e in s.split(',\\n'):
r = re.match(pattern, e)
print(r)
re.escape(pattern) 可以对字符串中所有可能被解释为正则运算符的字符进行转义的应用函数。如果字符串很长且包含很多特殊技字符,而你又不想输入一大堆反斜杠,或者字符串来自于用户(比如通过raw_input函数获取输入的内容),且要用作正则表达式的一部分的时候,可以使用这个函数.
re模块中包含一个重要函数是compile(pattern [, flags]) ,该函数根据包含的正则表达式的字符串创建模式对象。可以实现更有效率的匹配。在直接使用字符串表示的正则表达式进行search,match和findall操作时,python会将字符串转换为正则表达式对象。而使用compile完成一次转换之后,在每次使用模式的时候就不用重复转换。当然,使用re.compile()函数进行转换后,re.search(pattern, string)的调用方式就转换为 pattern.search(string)的调用方式。
其中,后一种调用方式中,pattern是用compile创建的模式对象。如下:
>>> import re
>>> some_text = 'a,b,,,,c d'
>>> reObj = re.compile('[, ]+')
>>> reObj.split(some_text)
['a', 'b', 'c', 'd']
在进行search,match等操作前不适用compile函数,会导致重复使用模式时,需要对模式进行重复的转换。降低匹配速度。而此种方法的调用方式,更为直观。如下:
>>> import re
>>> some_text = 'a,b,,,,c d'
>>> re.split('[, ]+',some_text)
['a', 'b', 'c', 'd']
python正则模块re中findall和finditer两者相似,但却有很大区别。
两者都可以获取所有的匹配结果,这和search方法有着很大的区别,同时不同的是一个返回list,一个返回一个类型的iteratorMatchObject
假设我们有这样的数据:其中数字代表电话号,xx代表邮箱类型
Demand feedback