Regex в Python Loop - PullRequest
       0

Regex в Python Loop

4 голосов
/ 07 октября 2019

Попытка очистить погодные условия (индекс 9 в списке v) и сохранить переменную на потом. Испытываете затруднения при написании правильного регулярного выражения для сохранения условия, состоящего из 1 или 2 слов.

Протестировал мой код регулярного выражения на regexr.com, и он выглядит нормально, но не работает при запуске в IDLE.

v = ['\n\n7:53 AM\n\n\n\n\n',
 '\n\n\n\n\n\n48 \nF\n    \n\n\n\n\n\n\n',
 '\n\n\n\n\n\n45 \nF\n    \n\n\n\n\n\n\n',
 '\n\n\n\n\n\n89 \n%\n    \n\n\n\n\n\n\n',
 '\n\nSE\n\n\n\n\n',
 '\n\n\n\n\n\n5 \nmph\n    \n\n\n\n\n\n\n',
 '\n\n\n\n\n\n0 \nmph\n    \n\n\n\n\n\n\n',
 '\n\n\n\n\n\n30.11 \nin\n    \n\n\n\n\n\n\n',
 '\n\n\n\n\n\n0.0 \nin\n    \n\n\n\n\n\n\n',
 '\n\nMostly Cloudy\n\n\n\n\n']

for condition in str(v[9]):
        condition_search = re.findall('[A-Z]\w+', condition)
        if len(condition_search) > 1:
            condition = ' '
            condition = condition.join(condition_search)
        else:
            condition = str(condition_search)

print(condition)

фактические результаты:

'[]'

желательнорезультаты

'Mostly Cloudy'

Ответы [ 3 ]

3 голосов
/ 08 октября 2019

Регулярные выражения хороши, но я думаю, что вы ищете .strip():

text='\n\nMostly Cloudy\n\n\n\n\n'
print(text.strip())

Результат:

Mostly Cloudy

и окружающие пробелы исчезли.
(Найти документы на https://docs.python.org/3/library/stdtypes.html)

2 голосов
/ 08 октября 2019

Поскольку вы выполняете очистку некоторых погодных данных, я предполагаю, что полученные данные каким-то образом стандартизированы.

Глядя на данные, вы можете сказать, что необходимая информация дополняется множеством символов новой строки и пробела. спереди и сзади (что вам не нужно). Чтобы удалить их:

Простое решение без регулярных выражений:

# This removes the leading and trailing white-space characters in each line,
# which also includes space, newline, tabs, etc,.
processed_weather_data = [line.strip() for line in v]

# Lets say you need weather condition which is at the 9th index
print(processed_weather_data[9])
2 голосов
/ 07 октября 2019

Возможно, это просто вернуло бы следующее:

import re
v = ['\n\n7:53 AM\n\n\n\n\n',
     '\n\n\n\n\n\n48 \nF\n    \n\n\n\n\n\n\n',
     '\n\n\n\n\n\n45 \nF\n    \n\n\n\n\n\n\n',
     '\n\n\n\n\n\n89 \n%\n    \n\n\n\n\n\n\n',
     '\n\nSE\n\n\n\n\n',
     '\n\n\n\n\n\n5 \nmph\n    \n\n\n\n\n\n\n',
     '\n\n\n\n\n\n0 \nmph\n    \n\n\n\n\n\n\n',
     '\n\n\n\n\n\n30.11 \nin\n    \n\n\n\n\n\n\n',
     '\n\n\n\n\n\n0.0 \nin\n    \n\n\n\n\n\n\n',
     '\n\nMostly Cloudy\n\n\n\n\n']

condition_search = re.findall(r'[A-Z][A-Za-z\s]+[a-z]', v[9])

print(condition_search[0])

Вывод

Mostly Cloudy

Если вы хотите упростить / изменить / изучить выражение, это было объяснено наверхняя правая панель regex101.com . Если вы хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами входных данных.


RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

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