Ответ 1
Я предлагаю
l = re.compile("(?<!^)\s+(?=[A-Z])(?!.\s)").split(s)
Отметьте эту демонстрацию.
Каков наилучший способ разделить строку как "HELLO there HOW are YOU"
на слова верхнего регистра (в Python)?
Итак, у меня получится такой массив: results = ['HELLO there', 'HOW are', 'YOU']
ИЗМЕНИТЬ:
Я пробовал:
p = re.compile("\b[A-Z]{2,}\b")
print p.split(page_text)
Однако это не работает.
Я предлагаю
l = re.compile("(?<!^)\s+(?=[A-Z])(?!.\s)").split(s)
Отметьте эту демонстрацию.
Вы можете использовать lookahead:
re.split(r'[ ](?=[A-Z]+\b)', input)
Это будет разбиваться на каждое пространство, за которым следует строка прописных букв, заканчивающихся границей слов.
Обратите внимание, что квадратные скобки предназначены только для удобства чтения и также могут быть опущены.
Если достаточно, чтобы первая буква слова была в верхнем регистре (так что если вы хотите разбить перед Hello
), это станет еще проще:
re.split(r'[ ](?=[A-Z])', input)
Теперь это разбивается на каждое пространство, за которым следует любая буква верхнего регистра.
Вам не нужен раскол, а скорее findall:
re.findall(r'[A-Z]+[^A-Z]*', str)
Ваш вопрос содержит строковый литерал "\b[AZ]{2,}\b"
, но это \b
будет означать возврат, потому что нет r-модификатора.
Попробуйте: r"\b[AZ]{2,}\b"
.