我试图找到一个正则表达式模式,并将其放在一个dataframe列中,同时循环另一个列的值。
问题:它在60次迭代之前都能正常工作,但之后它只显示NaN。我有40万个条目,它们中的大多数都应该匹配。
为什么会这样?我该如何修复它?
import re
new_mail = []
for urlcore in re.finditer('https*://[www.]*(\S*).*\.(fr|com)',str(df['Site_Web'])):
yolo = urlcore.group(1)
new_mail.append(yolo)
df['urlcore'] = pd.Series(new_mail)
df['urlcore'] = df['urlcore'].str.replace('.', '', regex=True).replace('-', '', regex=True)发布于 2019-02-21 22:49:34
由于(\S*).*,您的正则表达式会遇到性能问题。将其更改为https?:\/\/(www\.)?(\S*)\.(fr|com)
发布于 2019-02-21 23:15:17
正确的正则表达式是:
(?:https?://)?(?:www\.)?([a-zA-Z0-9][a-zA-Z0-9-]{1,61})\.[a-zA-Z]{2,}注意,您在正则表达式中有三个未命名的组,但是第一个和第二个没有被捕获,因此为了访问核心部分,应该是urlcore.group(1)

在本例中,您需要更改(fr|com)的结尾部分,如果需要处理子域,还需要修改正则表达式以处理以前的可选组(?:[a-zA-Z0-9][a-zA-Z0-9-]{1,61}\.)*
https://stackoverflow.com/questions/54809122
复制相似问题