#python-3.x #regex #string #split #re
Вопрос:
Приведен следующий текстовый список:
text = ["Nanjing Office and Retail Market Overview 2019 Second Quarter",
"Xi'an Office and Retail Market Overview 2020 Q1",
"Suzhou office and retail overview 2019 fourth quarter DTZ Research",
"marketbeat Shanghai office Second quarter of 2020 Future New Grade A office supply in non-core business districts One-year trend Although the epidemic in Shanghai has been controlled in a timely and effective manner, the negative impact of the epidemic on Shanghai's commercial real estate The impact continues.",
"Shanghai office September 2019 marketbeats 302.7 -0.4% 12.9% rent rent growth vacancy"]
Я хотел бы использовать несколько слов ( Market, quarter, marketbeats
) для разделения каждого строкового элемента, а затем получить первую часть, включающую слова-разделители:
for string in text:
# string = string.lower()
split_str = re.split(r"[Market|quarter|marketbeats]", string)
print(split_str)
Из:
['n', 'njing offic', ' ', 'nd ', '', '', '', 'il ', '', '', '', '', '', ' ov', '', 'vi', 'w 2019 ', '', 'cond ', '', '', '', '', '', '', '']
["xi'", 'n offic', ' ', 'nd ', '', '', '', 'il ', '', '', '', '', '', ' ov', '', 'vi', 'w 2020 ', '1'],
...
Но ожидаемый результат будет таким:
"Nanjing Office and Retail Market",
"Xi'an Office and Retail Market",
"Suzhou office and retail overview 2019 fourth quarter",
"marketbeat Shanghai office Second quarter",
"Shanghai office September 2019 marketbeats"
Как я мог получить правильный результат в Python? Спасибо.
Ответ №1:
Вы могли бы использовать re.findall
подход здесь:
text = ["Nanjing Office and Retail Market Overview 2019 Second Quarter", "Xi'an Office and Retail Market Overview 2020 Q1", "Suzhou office and retail overview 2019 fourth quarter DTZ Research", "marketbeat Shanghai office Second quarter of 2020 Future New Grade A office supply in non-core business districts One-year trend Although the epidemic in Shanghai has been controlled in a timely and effective manner, the negative impact of the epidemic on Shanghai's commercial real estate The impact continues.", "Shanghai office September 2019 marketbeats 302.7 -0.4% 12.9% rent rent growth vacancy"]
output = [re.findall(r'^.*?b(?:Market|quarter|marketbeats|$)b', x)[0] for x in text]
print(output)
Это печатает:
['Nanjing Office and Retail Market',
"Xi'an Office and Retail Market",
'Suzhou office and retail overview 2019 fourth quarter',
'marketbeat Shanghai office Second quarter',
'Shanghai office September 2019 marketbeats']
Комментарии:
1. Извините, почему я получаю
list index out of range
за какой-то элемент списка с реальными данными?2. @ahbon Причина, скорее всего, в том, что в некоторых ваших вводимых текстах нет одного из 3 ключевых слов. Я только что внес небольшое изменение в свой ответ, которое займет весь ввод до конца в случае, если в нем нет маркера ключевого слова. Если вы хотите какого-то другого поведения, то укажите, что вам нужно.
3. Ваш код обновления, похоже, не работает, вы можете протестировать его с помощью
text = ["Nanjing Office and Retail Market Overview 2019 Second Quarter", "Nanjing Office and Retail Overview 2019", "Xi'an Office and Retail Market Overview 2020 Q1", "Suzhou office and retail overview 2019 fourth quarter DTZ Research"]
4. Похоже, в этой демо -версии все работает нормально.