вопрос с регулярным выражением, частичное решение которого уже найдено

#python-3.x

#python-3.x

Вопрос:

 string = "My QUIZZING codes is GREATLY bad so quizzing number is the integer 94.4; I don't like any other BuzzcuT except 1.n"
  

Из этой строки тарабарщины я хочу извлечь слова, ВЫЗЫВАЮЩИЕ БОЛЬШОЙ интерес, и сократить, оставив их заглавные буквы или их отсутствие как есть.

 caps = re.findall('([A-Z] (?:(?!s?[A-Z][a-z])s?[A-Z]) )', string)
print(string)
  

Этот код, который у меня есть / код, который вы видите, приводит к ['QUIZZING', 'GREATLY'] …. но я надеюсь получить ['QUIZZING', 'GREATLY', 'BuzzcuT']
Хотя это тарабарщина, суть в различных буквенно-цифровых комбинациях, которые усложняют ее .

Ответ №1:

Приведенное ниже регулярное выражение находит 3 шаблона в строке вашего примера.

 import re

string = "My QUIZZING codes is GREATLY bad so quizzing number is the integer 94.4; I don't like any other BuzzcuT except 1.n"


# The regex contains 2 patterns
# b[A-Z]{3,}S*b -- will match QUIZZING and GREATLY
# b[A-Z]{1}[a-z]S*[A-Z]b -- will match BuzzcuT
#
# You could use a single pattern -- [A-Z]{1,}S*[A-Z] 
# to match all 3 words
# 
word_pattern = re.compile(r'b[A-Z]{3,}S*b|b[A-Z]{1}[a-z]S*[A-Z]b')
find_words = re.findall(word_pattern, string)
if find_words:
  print (find_words)
  # output 
  ['QUIZZING', 'GREATLY', 'BuzzcuT']