Таким образом, вы хотите захватить буквенно-цифровой текст, только если ему предшествует или после него стоит число и дефис.Вы можете использовать это регулярное выражение, которое использует чередование для захвата обоих случаев,
([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']