Извлечение подстроки из строки с использованием Python и регулярных выражений - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть кадр данных pandas, содержащий очень длинные строки в столбце 'page', из которого я пытаюсь извлечь подстроку из:

Пример строки: / ex / search /! Tu/ p / z1 / zVJdb4IwFP0r88HH0Sp-hK / dz / d5 / L2dBISEvZ0FBIS9nQSEh /? s & search_query = пример один & y = 0 & x = 0

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

Пока мой код выглядит так:

import pandas as pd
import re

dataset = pd.read_excel(r'C:\Users\example.xlsx')
dataframe = pd.DataFrame(dataset)

dataframe['Page'] = format = re.search(r'&(.*)&',str(dataframe['Page']))

dataframe.to_excel(r'C\Users\output.xlsx)

Приведенный выше код выполняется, но ничего не выводит в мою новую электронную таблицу.

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

Вы можете попробовать это

(?<=&).*?(?=&)

Пояснение

  • (?<=&) - Положительный взгляд сзади.Соответствует &.
  • (.*?) - Соответствует всему, кроме новой строки.(Ленивый метод).
  • (?=&) - Положительные прогнозные совпадения &.

Демо

0 голосов
/ 11 декабря 2018

Быстрый и эффективный метод панд.

Пример данных:

temp,page
1,  /ex/search/!tu/p/z1/zVJdb4IwFP0r88HH0Sp-hK/dz/d5/L2dBISEvZ0FBIS9nQSEh/?s&search_query=example one&y=0&x=0
2,  /ex/search/!tu/p/z1/zVJdb4IwFP0r88HH0Sp-hK/dz/d5/L2dBISEvZ0FBIS9nQSEh/?s&search_query=example one&y=0&x=0
3,  /ex/search/!tu/p/z1/zVJdb4IwFP0r88HH0Sp-hK/dz/d5/L2dBISEvZ0FBIS9nQSEh/?s&search_query=example one&y=0&x=0

Код:

df = example.data # from above
df["query"] = df['page'].str.split("&", expand=True)[1].str.split("=", expand=True)[1]
print(df)

Пример вывода:

   temp  \
0  1          
1  2          
2  3          

                                                                                                          page  \
0    /ex/search/!tu/p/z1/zVJdb4IwFP0r88HH0Sp-hK/dz/d5/L2dBISEvZ0FBIS9nQSEh/?s&search_query=example one&y=0&x=0   
1    /ex/search/!tu/p/z1/zVJdb4IwFP0r88HH0Sp-hK/dz/d5/L2dBISEvZ0FBIS9nQSEh/?s&search_query=example one&y=0&x=0   
2    /ex/search/!tu/p/z1/zVJdb4IwFP0r88HH0Sp-hK/dz/d5/L2dBISEvZ0FBIS9nQSEh/?s&search_query=example one&y=0&x=0   

         query  
0  example one  
1  example one  
2  example one  

Если вы хотите пометить столбцы на основена паре ключ = значение, это было бы другим извлечением после слов.

0 голосов
/ 11 декабря 2018

Вы можете извлечь строку запроса из URL с помощью urllib.parse.urlparse, а затем проанализировать ее с помощью urllib.parse.parse_qs:

>>> from urllib.parse import urlparse, parse_qs
>>> path = '/ex/search/!tu/p/z1/zVJdb4IwFP0r88HH0Sp-hK/dz/d5/L2dBISEvZ0FBIS9nQSEh/?s&search_query=example one&y=0&x=0'
>>> query_string = urlparse(path).query  
>>> parse_qs(query)
{'search_query': ['example one'], 'y': ['0'], 'x': ['0']}

РЕДАКТИРОВАТЬ: Чтобы извлечь query_string из всех страниц в столбце Page:

dataframe['Page'] = dataframe['Page'].apply(lambda page: parse_qs(urlparse(page).query)['search_query'][0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...