正则表达式循环在60次迭代后停止

时间:2019-02-21 14:15:26

标签: python regex for-loop

我试图找到一个正则表达式模式并将其放在数据框列中,同时遍历另一列的值。

问题:直到第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)

2 个答案:

答案 0 :(得分:0)

由于(\S*).*,您的正则表达式会遇到性能问题。将其更改为https?:\/\/(www\.)?(\S*)\.(fr|com)

答案 1 :(得分:-2)

正确的正则表达式为:

(?:https?://)?(?:www\.)?([a-zA-Z0-9][a-zA-Z0-9-]{1,61})\.[a-zA-Z]{2,}

请注意,您在正则表达式中具有三个未命名的组,但不会捕获第一个和第二个,因此要访问核心部分,应使用urlcore.group(1)

enter image description here

在您的情况下,您需要更改(fr | com)的结尾部分;如果需要处理子域,还需要修改正则表达式以处理先前的可选组(?:[a-zA-Z0-9][a-zA-Z0-9-]{1,61}\.)*