Не выполнять замену строки если не выполняется правило регулярного выражения
есть список ссылок и существует список из правил, согласно которым необходимо из этих строк вытащить определенную часть строки, если же правило не подходит, то ничего не отображать
был написан такой код
line1='/site/page/same-text'
line2='/same-text/same-text/same-text'
df=pd.DataFrame({'original': [line1, line2]})
df['replace'] = df['original'].apply(lambda x: re.sub(r'(/.{0,})(/page)(/[A-Za-z0-9=_-]+)', r'\1', x))
df
который возвращает
| original | replace |
|---|---|
| /site/page/same-text | /site |
| /same-text/same-text/same-text | /same-text/same-text/same-text |
необходимо, чтобы если правило не подходило, то не отображать ничего в строке
| original | replace |
|---|---|
| /site/page/same-text | /site |
| /same-text/same-text/same-text |
Ответы (2 шт):
Автор решения: handowl
→ Ссылка
Возможно вот так будет работать так, как Вам надо:
def replace_function(string: str)->str:
'''
Function for searching the matches. Returns empty string or the first match if found.
'''
matches = re.match(r'(/.{0,})(/page)(/[A-Za-z0-9=_-]+)', string)
if matches is not None:
return matches.groups()[0]
return ''
df['replace'] = df['original'].apply(replace_function)
Не получилось в одну строку с ходу, надо подумать
Автор решения: SergFSM
→ Ссылка
потестируйте такой вариант (с приведенным примером работает):
df['replace'] = df['original'].str.extract(r'(.*)/page.*')
>>> df
'''
original replace
0 /site/page/same-text /site
1 /same-text/same-text/same-text NaN