正则表达式中,使用 {}(大括号) 限制匹配次数时的坑

1、引入数据
import re
import pandas as pd

data = {'Dave': '[email protected]', "Steve": '[email protected]',
        "Rob": "[email protected]", "Wes": np.nan}
data = pd.Series(data)

data

Out[68]: 
Dave      dave@google.con
Steve    steve@gmamil.com
Rob         rob@gmail.com
Wes                   NaN
dtype: object
2、目标:将 data 中的邮件地址以 @. 进行分割,并取出分割后的每一部分内容
""" 
方式一:单纯使用正则表达式 
注意入坑:使用正则 {m,n} 时,m 和 n 之间不能有空格 
"""
# 错误示范:
data.str.findall(r"([A-Z0-9._%+-]+)@([A-Z0-9.-]+)\.([A-Z]{2, 4})", re.I)  

Out[69]: 
Dave      []
Steve     []
Rob       []
Wes      NaN
dtype: object

# 修正错误:
data.str.findall(r"([A-Z0-9._%+-]+)@([A-Z0-9.-]+)\.([A-Z]{2,4})", re.I)

Out[70]: 
Dave      [(dave, google, con)]
Steve    [(steve, gmamil, com)]
Rob         [(rob, gmail, com)]
Wes                         NaN
dtype: object

""" 方式二:调用 pandas 的 str.split() 函数,并使用正则作为参数 """
data.str.split(r"@|\.")

Out[72]: 
Dave      [dave, google, con]
Steve    [steve, gmamil, com]
Rob         [rob, gmail, com]
Wes                       NaN
dtype: object

你可能感兴趣的:(python,#,pandas)