Возможно ли упростить регулярное выражение?

Вот сам regex:

[а-я]{1,30}|[a-z]{1,30}

Возможно ли избежать повторения {1,30}?


Ответы (1 шт):

Автор решения: A_Vaclav

вот код для тестов, как это все работает:

import re
def test_re(s):
    t = r'[а-я]{1,30}|[a-z]{1,30}'
    res = re.search(t, s)
    return res

testlist = [
            '',
            'кириллицаффффффффффффффффффффяяsss',
            'кириллицаsssssssssssssssssssssssss',
            'asciiaaaaaaaaaaaaaaaaaaaaaaaazzффф',
            'asciiффффффффффффффффффффффффффффф'
           ]
for x in testlist:
    print(test_re(x))

re.search(pattern, string) Метод search() ищет по всей строке, но возвращает только первое найденное совпадение. Информация взята тут.

для t = r'([а-я]|[a-z]){1,30}' - перестает фильтровать кириллицу|латиницу. По сути операция | (или) делит шаблон на две подстроки, поэтому дальнейшую обработку нужно применять к каждой подстроке.

Но! Можно так:

import re
def test_re(s):
    t = r'([а-я]+|[a-z]+)'
    res = re.search(t, s)
    return res.group(0)[:30:]
testlist = [
            'кириллицаффффффффффффффффффффяяsss',
            'кириллицаsssssssssssssssssssssssss',
            'asciiaaaaaaaaaaaaaaaaaaaaaaaazzффф',
            'asciiффффффффффффффффффффффффффффф'
           ]
for x in testlist:
    print(test_re(x))  
→ Ссылка