Извлечь вхождения матчей RegEx - PullRequest
0 голосов
/ 26 марта 2019

У меня есть строка из бюллетеня NWS:

LTUS41 KCAR 141558 AAD TMLB Forecast for the National Parks 
KHNX 141001 RECHNX Weather Service San Joaquin Valley

Моя цель - извлечь пару полей с регулярными выражениями.В первой строке я хочу "AAD", а во второй строке я хочу "RECHNX".Я пробовал:

( )\w{3} #for the first string

и

\w{6} #for the 2nd string

Но они находят все строки из 3 и 6 символов, ведущие к нужной мне строке.

Ответы [ 3 ]

1 голос
/ 26 марта 2019

Предполагая, что поля, которые вы хотите извлечь, всегда состоят из заглавных букв и им предшествуют 6 цифр и пробел, это регулярное выражение поможет:

(?<=\d{6}\s)[A-Z]+

Демо: https://regex101.com/r/dsDHTs/1

Редактировать: если вы хотите сопоставить до двух буквенно-цифровых прописных слов, перед которыми стоят 6 цифр, вы можете использовать:

(?<=\d{6}\s)([A-Z0-9]+\b)\s(?:([A-Z0-9]+\b))*

Демо: https://regex101.com/r/dsDHTs/5

Если у вас есть определенный список допустимых полей, вы также можете просто использовать:

(AAD|TMLB|RECHNX|RR4HNX)

https://regex101.com/r/dsDHTs/3

0 голосов
/ 26 марта 2019

Чтобы прочитать первые группы из слов символов из каждой строки, вы можете использовать шаблон типа (\w+) (\w+) (\w+) (\w+).

Затем из первой строки прочитайте группу № 4 и из второйстрока чтения группы № 3.

Посмотрите на следующую программу.Он печатает четыре группы из каждой строки источника:

import re

txt = """LTUS41 KCAR 141558 AAD TMLB Forecast for the National Parks
KHNX 141001 RECHNX Weather Service San Joaquin Valley"""

n = 0
pat = re.compile(r'(\w+) (\w+) (\w+) (\w+)')
for line in txt.splitlines():
    n += 1
    print(f'{n:2}: {line}')
    mtch = pat.search(line)
    if mtch:
        gr = [ mtch.group(i) for i in range(1, 5) ]
        print(f'    {gr}')

Результат:

 1: LTUS41 KCAR 141558 AAD TMLB Forecast for the National Parks 
    ['LTUS41', 'KCAR', '141558', 'AAD']
 2: KHNX 141001 RECHNX Weather Service San Joaquin Valley
    ['KHNX', '141001', 'RECHNX', 'Weather']
0 голосов
/ 26 марта 2019

Поскольку подстрока, которую вы хотите извлечь, представляет собой слово, которое следует за числом, разделенным пробелом, вы можете использовать re.search со следующим регулярным выражением (учитывая, что ваш ввод хранится в s):

re.search(r'\b\d+ (\w+)', s).group(1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...