Dla fachowców od RegExp

Mam w pliku tekstowym przykładowo tak niepoprawnie zapisane nazwiska:
Mckenzie, Mcdonalds, Mccoy

Żeby je odnaleźć używam formuły w RegExp.:

mc[a-z]\w+

Jak teraz zmienić przy pomocy RegExp te i inne nazwiska na dużą literę:

McKenzie, McDonalds, McCoy

PS. W tym dziale 1 post na 2 dni, rzadko tu ktoś zagląda :sob:

Ile takich samych tematów jeszcze założysz?

Powinien być tylko tu, ale… to martwy dział, jak wcześniej zauważyłem.

Zamiast jęczeć, że martwy dział i mało ludzi pisze - napisałbyś łaskawie za pomocą jakiego programu wyszukujesz te wzorce, na jakim systemie i z jakiego modelu REGEX ten program korzysta.

Proszę, zamianę z małego znaku na duży musisz wykonać we własnym zakresie już na drugim argumencie bo czegoś takiego regex nie wspiera i trzeba to zrobić już w danym środowisku.
regexr.com/495e8

Ja po prostu dodałem coś przed i za znakiem który chcesz modyfikować.

PS. Pokaż przykłady tematów z tego działu gdzie ktoś nie odpowiada przez te 2 dni …

No właśnie - na wynikach działania filtra musisz zastosować “stream editor”, np. tr, awk, w ostateczności sed. Zależy w jakim środowisku działasz … może skrypt power shell.

 To jest program SubEdit, plik Settings.xml


    <Enabled>True</Enabled>
    <FindWhat>[Mm]c([a-z])\w</FindWhat>
    <ReplaceWith>Mc$1??????</ReplaceWith>
    <SearchType>RegularExpression</SearchType>
    <Description></Description>

Co zrobić aby, $1 był zawsze z dużej litery?
W programach przeważnie jest coś takiego jak: UCase.

Z każdego typu RegExp da się to zastosować, jeśli znajdzie się logiczną formułę.
Nie chwaląc się jestem dobry w te klocki, ale tu mnie logika zawiodła.

Jak to zamienić na duży znak szukaj w dokumentacji programu - o ile się w ogóle da. W sumie to nie kojarzę by w jakimkolwiek programie coś takiego było możliwe. Chyba w sublime by się dało to zrobić, no ale on ma wbudowanego pythona więc to inna bajka …

Prosty script.vbs to potrafi :grinning:

Oczywiście, że potrafi, ba to nawet prostszy sposób na zrobienie tego o co pytasz … Ja tego programu co używasz nie znam i nie mam potrzeby się go uczyć, jeśli więc koniecznie chcesz zmienić wielkość liter przy jego użyciu to musisz resztę ogarnąć we własnym zakresie.
Ja Ci podałem to o co pytałeś, czyli odpowiednie wyrażenie oraz przykład jak modyfikować tekst przy użyciu regex.

To proste przez replace ale nie za bardzo cię rozumie:
Czy ci chodzi tyko o Mc czy np. jak by pisało Pakuła to miał by zmienić na PaKuła
To wtedy jest inna spraw i tego tak prosto nie zrobisz

Po Mc następna litera musi być duża, czyli trzecia McDonalds

https://regexr.com/4968d - modyfikując powyższe?

Tylko nie złapie ci:

mamnaimieMcLadus”, wychwyci końcówkę.

tu są 2 przykłady: Mckenzie, mcKenzie
najczęściej spotykanej niepoprawnej pisowni

Poprawna postać to: McKenzie (MacKenzie)

1.Find:
Mckenzie, mckenzie
([Mm]c)([a-z])(\w+)

2.Find:
mcKenzie
(mc)([A-Z])(\w+)

Replace
Mc$2$3

$2 wpisuje identyczny znak jaki jest w Find:
Jaki trik zastosować, aby $2 zawsze wpisywało znak z dużej litery.

Mówi się, że jak się chce, to wszystko można znaleźć i zrobić.
Jakoś mnie to się nie sprawdza. :grinning:

Prędzej “z pustego i Salomon nie naleje”

Czemu nie napiszesz do tego skryptu w dowolnym języku programowania, tylko koniecznie chcesz to zrobić w jakimś programie. W skrypcie użyłbyś jakiejś funkcji touppercase na tym jednym znaku i byłoby po sprawie …

Druga opcja to nie szukać a-z, a po kolei wszystkich małych liter i w replace wstawić odpowiednik dużej. Takie coś też da się wygenerować, kiedyś używałem jakiegoś generatora permutacji online do podobnego celu.

Mam dodatkowo zrobiony program, który robi to czego
w SubEdit (dokładnie: RegExp) nie potrafię zrobić.

w tym przypadku jak już wcześniej pisałem o wykorzystaniu UCase$.

To byłoby tyle kodów, ile jest małych liter (utopia).

“generator permutacji online”, czy takie coś można użyć razem z RegExp?

Możesz użyć do wygenerowania potrzebnych ustawień dla regex replace.

PS. Utopia to coś doskonałego, idealnego. Słowo pochodzi od nazwy jakiegoś tam idealnego nieistniejącego miasta.

Nic takiego (musiałby generować kod dla Replace) nie mogę namierzyć.
Tylko szkolne wzory.

Co do samego regex to znalazłem takie info:
https://www.regular-expressions.info/replacecase.html
https://www.regular-expressions.info/refreplacecase.html

Więc teoretycznie zrobienie czegoś takiego \U$1 powinno podnieść tą grupę do wysokich znaków. Jednak nie udało mi się tego uruchomić i potwierdzić w praktyce …

Co do generatora jakiś wariacji tekstu z danymi zmiennymi to używałem któregoś toolsa z tej strony - https://textmechanic.com/text-tools/combination-permutation-tools/permutation-generator/
Trzeba dopasować odpowiednie narzędzie do konkretnych potrzeb. Ogólnie to mógłbyś sobie te wszystkie reguły bez problemu wygenerować przy pomocy kilku linijkowego skryptu w bashu lub dowolnym języku programowania.

Ogólnie to przez te 20 godzin to byś już dawno przekonwertował kilkaset GB danych jak nie więcej gdybyś napisał do tego prosty skrypt, a tak tracisz czas na kopanie się z koniem.

Aha, no i dalej czekam na:

a wniosek wyciągnąłem z tego, że w momencie pisania postu tematy były zakładane jeden na 2 dni.

3,5,7,9 dni temu a dalej to tragedia.