Jaki jest najlepszy sposób na podzielenie ciągu znaków na przykład "HELLO there HOW are YOU"
wielkimi literami (w Pythonie)?
Więc skończyłbym z tablicą taką jak taka: results = ['HELLO there', 'HOW are', 'YOU']
EDYTOWAĆ:
Próbowałem:
p = re.compile("\b[A-Z]{2,}\b")
print p.split(page_text)
Wydaje się jednak, że to nie działa.
re.split()
?Odpowiedzi:
sugeruję
Sprawdź to demo .
źródło
re.split(re.split(pattern, string, maxsplit=0, flags=0))
jak wspomniano we wcześniej cytowanych dokumentach.Możesz użyć lookahead:
Spowoduje to podzielenie w każdej spacji, po której następuje ciąg wielkich liter kończących się granicą słowa.
Zauważ, że nawiasy kwadratowe służą tylko do czytelności i równie dobrze można je pominąć.
Jeśli wystarczy, że pierwsza litera słowa jest wielka (więc jeśli chcesz podzielić również przed
Hello
nią), stanie się jeszcze łatwiej:Teraz dzieli się na każdą spację, po której następuje dowolna wielka litera.
źródło
re.split(r'[ ](?=[A-Z]+\b)', input)
żeby nie znalazło wielkich liter? Np. Nie pasuje do „A”? Próbowałemre.split(r'[ ](?=[A-Z]{2,}+\b)', input)
. dzięki!I
?re.split(r'[ ](?=[A-Z]{2,}\b)', input)
powinien to zrobić.[ ]+
a może nawet,\W+
złapanie nieco więcej przypadków. Mimo wszystko dobra odpowiedź.[ ]
nie zadziałało dla mnie. Zamiast tego użyłem\s
. Kompletnere.split("\s(?=[A-Z]+\s)", string)
Twoje pytanie zawiera literał ciągu
"\b[A-Z]{2,}\b"
, ale\b
będzie to oznaczać cofnięcie, ponieważ nie ma modyfikatora r.Spróbuj:
r"\b[A-Z]{2,}\b"
.źródło