#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']