Цикл регулярных выражений останавливается после 60 итераций - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь найти шаблон регулярного выражения и поместить его в столбец информационного кадра, циклически перебирая значения другого столбца.

Проблема: она творит чудеса вплоть до 60-й итерации, но затем показывает толькоNaN.У меня 400 000 записей, и большинство из них должно совпадать.

Почему это так и как я могу это исправить?

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 голосов
/ 21 февраля 2019

правильное регулярное выражение для этого:

(?: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}\.)*

0 голосов
/ 21 февраля 2019

Ваше регулярное выражение страдает от проблем с производительностью из-за (\S*).*.Измените его на https?:\/\/(www\.)?(\S*)\.(fr|com)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...