возвращать совпадения в списке со списком регулярных выражений Python - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть строка, если алфавитная часть слова содержит более 3 букв, я хочу сохранить ее в списке.Мне нужно хранить «час» и «lalal» в списке.Я написал шаблон регулярных выражений для буквенно-цифровых и цифровых буквенных последовательностей, как показано ниже.

regex = ["([a-zA-Z])-([0-9])*","([0-9])*-([a-zA-Z])"]
tring = 'f-16  is 1-hour, lalal-54'
for r in regex:
    m = re.search(r,tring)
    d.append((m.group(0))
print(d)

Но это, очевидно, дает мне все буквенно-цифровые шаблоны, которые также сохраняются.Итак, я подумал, что могу расширить это, чтобы подсчитать буквы в каждом шаблоне и хранить их по-разному.Это возможно?

Редактировать: Другой пример будет tring = Я буду там через 1 час, и результат для этого должен быть ['час']

1 Ответ

0 голосов
/ 20 февраля 2019

Таким образом, вы хотите захватить буквенно-цифровой текст, только если ему предшествует или после него стоит число и дефис.Вы можете использовать это регулярное выражение, которое использует чередование для захвата обоих случаев,

([a-zA-Z]{4,})-\d+|\d+-([a-zA-Z]{4,})

Объяснение:

  • ([a-zA-Z]{4,}) - захватывает буквенно-цифровой текст длинычетыре или более и хранит в группе 1
  • -\d+ - Гарантирует, что за ним следует дефис и одна или несколько цифр
  • | - Чередование, поскольку есть два случая
  • \d+- - соответствует одной или нескольким цифрам и дефису
  • ([a-zA-Z]{4,}) - захватывает буквенно-цифровой текст длиной четыре или более и сохраняет его в группе 2

Демо

Проверьте этот код питона,

import re

s = 'f-16  is 1-hour, lalal-54 I will be there in 1-hours'

d = []

for m in re.finditer(r'([a-zA-Z]{4,})-\d+|\d+-([a-zA-Z]{4,})',s):
 if (m.group(1)):
  d.append(m.group(1))
 elif (m.group(2)):
  d.append(m.group(2))

print(d)

s = 'f-16 is 1-hour, lalal-54'

arr = re.findall(r'[a-zA-Z]{4,}', s)
print(arr)

Отпечатки,

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