Tak na szybko:
//Dane wejściowe:
Aleksandrów Kujawski Aleksandrów Kujawski aleksandrowski 7,23 12,476 1726
Aleksandrów-Kujawski Aleksandrów-Kujawski aleksandrowski 7,23 12,476 1726
Barcin Barcin żniński 3,70 7,714 2085
Brodnica Brodnica brodnicki 23,15 28,574 1234
Brześć Kujawski Brześć Kujawski włocławski 7,04 4,718 670
Bydgoszcz Bydgoszcz Bydgoszcz[13] 175,98 358,614 2038
Chełmno Chełmno chełmiński 13,56 20,573 1517
Chełmża Chełmża toruński 7,84 14,965 1909
//Wzorzec regexp:
Szukany tekst: ([a-ząęśżźćńłó\s-]+)\1.*
Zamień na: \1
//Efekt:
Aleksandrów Kujawski
Aleksandrów-Kujawski
Barcin
Brodnica
Brześć Kujawski
Bydgoszcz
Chełmno
Chełmża
Działa to na tych danych co podałeś + zauważ, że uwzględniłem także, że nazwa może mieć w środku myślnik, bo niektóre miasta mogą tak być zapisane. Zakładam jednocześnie, że zawsze występuje powtórzenie nazwy miasta (i jest ono od razu po pierwszej nazwie) + mogą być jakieś dalsze dodatkowe znaki w wierszu i je wszystkie usuwamy (nie interesuje nas już co tam jest).
Zauważ też, że zostają na końcu spacje, aby je też usunąć proponuję oblecieć na koniec drugim regexp:
Szukany tekst: \s+$
Zamień na: (puste)
W ten sposób dopasuje wszystkie spacji na końcu wierszy i je usunie.
Nie jest to może najlepsza postać takiego wzorca ale nie mam w tej chwili czasu żeby bardziej do tego usiąść. Daj znać czy ten wzorzec działa poprawnie, a jeśli nie to daj dane, które obrabia błędnie. A i pamiętaj, że działa on dobrze na miastach zawierających w nazwie litery łacińskie a-z oraz polskie znaki diaktryczne plus białe znaki i myślniki. Jeśli obrabiasz też inne nazwy zagraniczne to daj znać bo to będzie głębszy problem.
Jeśli wzorzec spełni oczekiwania to w razie zainteresowania chętnie wyjaśnię z czego się składa.
Pozdrawiam