Регулярное выражение для поиска серии заглавных слов в строке - PullRequest
1 голос
/ 18 марта 2020
text = "This is a TEXT CONTAINING UPPER CASE WORDS and lower case words. This is a SECOND SENTENCE."

pattern = '[A-Z]+[A-Z]+[A-Z]*[\s]+'

re.findall(pattern, text) дает вывод ->

['TEXT ', 'CONTAINING ', 'UPPER ', 'CASE ', 'WORDS ', 'SECOND ', 'SENTENCE ']

Однако я хочу вывод примерно так ->

['TEXT CONTAINING UPPER CASE WORDS', 'SECOND SENTENCE']

Ответы [ 2 ]

1 голос
/ 18 марта 2020

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

\b[A-Z]+(?:\s+[A-Z]+)*\b

Демонстрация RegEx

Подробности RegEx:

  • \b: граница слова
  • [A-Z]+: сопоставить слово, содержащее только заглавные буквы
  • (?:\s+[A-Z]+)*: сопоставить пробел 1+, за которым следует другое слово с заглавными буквами. Соответствовать этой группе 0 или более раз
  • \b: граница слова

Код:

>>> s = 'This is a TEXT CONTAINING UPPER CASE WORDS and lower case words. This is a SECOND SENTENCE';
>>> print (re.findall(r'\b[A-Z]+(?:\s+[A-Z]+)*\b', s))
['TEXT CONTAINING UPPER CASE WORDS', 'SECOND SENTENCE']
0 голосов
/ 18 марта 2020
  1. Для улучшения регулярного выражения требуется как минимум 2 заглавные буквы, поэтому используйте выделенный синтаксис {2,} для 2 или более и используйте границу слова, чтобы быть уверенным, что вы поймете целое слово

    r'\b[A-Z]{2,}\b'
    
  2. Выполните работу для каждого предложения: найдите их с регулярным выражением c, и для каждого предложения найдите слова в верхнем регистре, затем сохраните их в массиве соединяя с пробелом

    result = []
    sentences = re.findall("[^.]+.", text)
    for sentence in sentences:
        uppercase = re.findall(pattern, sentence)
        result.append(" ".join(uppercase))
    print(result)  # ['TEXT CONTAINING UPPER CASE WORDS', 'SECOND SENTENCE']
    

В понимании списка это выглядит как

res = [" ".join(re.findall(pattern, sentence)) for sentence in re.findall("[^.]+.", text)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...