Przetwarzam tekst będący wielokrotnym powtórzeniem prostego wzoru. Tekst jest w formacie scenariusz do gry, podobnie jak to:Wyrażenie regularne, aby dopasować wszystkie znaki do następnego dopasowania.
SAMPSON
I mean, an we be in choler, we'll draw.
GREGORY
Ay, while you live, draw your neck out o' the collar.
obecnie używam wzorzec ([A-Z0-9\s]+)\s*\:?\s*[\r\n](.+)[\r\n]{2}
, które działa prawidłowo (wyjaśnienie poniżej) z wyjątkiem gdy mowy bohatera ma podziały wiersza w nim . Kiedy tak się dzieje, imię postaci zostaje przechwycone z powodzeniem, ale przechwycony zostaje tylko pierwszy wiersz mowy.
Włączenie trybu jednowierszowego (aby uwzględnić podziały wierszy w .
) tworzy tylko jeden gigantyczny mecz.
Jak mogę powiedzieć, aby (.+)
zatrzymał się po znalezieniu następnej nazwy postaci i zakończeniu meczu?
Powtarzam poszczególne pojedynki (JavaScript), więc nazwa musi być dostępna do następnego dopasowania.
Idealnie byłoby, aby dopasować wszystkie znaki, aż cały wzór zostanie powtórzony.
Wzór wyjaśnił:
Pierwsze mecze grupowe imię bohatera (pozwalającą litery, cyfry i spacje), (ze spływu okrężnicy i spacje opcjonalnie).
Druga grupa (mowa postaci) rozpoczyna się w nowym wierszu i przechwytuje dowolne znaki (z wyjątkiem problemów, linii i znaków po nich).
Wzór kończy się (i rozpoczyna się od nowa) po pustym wierszu.
trzeba jednoznacznie zdefiniować, jak określa, gdzie kolejna nazwa zaczyna się, zanim będzie można nakaz e regex, aby go dopasować. Czy to jedno słowo, a następnie dwukropek w linii? Czy to spowoduje niepoprawne dopasowanie? – mellamokb
@mellamokb Zapomniałem dołączyć ostatnią część wzorca, który szuka pustej linii. Mecz rozpoczyna się od imienia postaci (wszystkie kapitaliki w osobnej linii) i kończy po pustym wierszu po przemówieniu. – Nathan
Wierzę, że brakuje ci dwukropków w przykładowym tekście, wyrażenie regularne nie działa z tym. –