Konwertuj znaki na duże litery za pomocą wyrażeń regularnych (EditPad Pro)


159

Napisałem wyrażenie regularne z nadzieją, że uda mi się zamienić każde dopasowanie (czyli tylko jeden znak) na wielkie litery. Używam EditPada Pro (jednak jestem skłonny użyć dowolnego innego narzędzia, które by mi na to pozwoliło, o ile jest to darmowe, ponieważ muszę to zrobić tylko raz).

Tło: Mam bardzo długi plik tekstowy używany przez aplikację uwzględniającą wielkość liter, a niektóre słowa zaczynają się od małych liter zamiast wielkich liter, co powoduje awarię aplikacji. Wykonanie tego ręcznie zajęłoby bardzo dużo czasu, a obejście się bez wyrażeń regularnych byłoby dość skomplikowane, ponieważ występowanie (złej) małej litery jest bardzo specyficzne.

Napisałem wyrażenie regularne select i teraz mogę go używać z odwołaniem wstecznym (1 $ działa dobrze), ale nie mogę go zastąpić wielkimi literami. Myślałem, że coś takiego jak \ u $ 1 będzie działać, ale nie działa w EditPad Pro.

Jeśli żadne darmowe narzędzie nie pozwala mi tego zrobić, myślę, że alternatywą byłoby zrobienie tego w C #, jednak trochę mi się spieszy i nie blisko kompilatora, więc najpierw musiałbym pobrać wersję ekspresową, więc ... Lepiej byłoby znaleźć narzędzie, które obsługuje taką funkcję!

Dziękuję Ci!


3
Czy to pytanie jest bardziej odpowiednie dla superużytkownika?
georgiecasey

Odpowiedzi:


273

TextPad pozwoli ci wykonać tę operację.

przykład:

test this sentence

Znajdź: \([^ ]*\) \(.*\) Zamień na:\U\1\E \2

\Uspowoduje, że wszystkie następujące znaki być górny

\Ewyłączy\U

wynikiem będzie:

TEST this sentence

13
Czy istnieje sposób wykonania tej operacji w .NET Regex (bez użycia ToUpper)?
Shimmy Weitzhandler

34
Działa również w notatniku ++.
Shawn

33
\U$1\Ew Sublime Text
Qwerty,

10
\U\1\Ew Vim
J. Katzwinkel

6
Działa również w PHPStorm. Miałem jednak odwrotny wymóg. Musiałem zamienić wszystkie wartości atrybutów z wielkich liter (z prawdopodobnie HTML z lat 90.) na małe. Korzystanie \L$1\Ezadziałało.
Ejaz,

30

Wiem, że ten wątek dotyczy EditPada Pro, ale przyszedłem tutaj, ponieważ miałem takie same potrzeby z wyrażeniem regularnym javascript.

Dla osób, które tutaj potrzebują tej samej wskazówki, możesz użyć funkcji lub lambda jako argumentu zamiany.

Używam poniższej funkcji do konwersji nazw css z -na odpowiednik javascript, na przykład "border-top"zostaną przekształcone w "borderTop":

    s = s.replace(/\-[a-z]/g, x => x[1].toUpperCase());

26

EditPad Pro i PowerGREP mają unikalną funkcję, która pozwala zmienić wielkość liter odniesienia wstecznego. \U1wstawia pierwsze odniesienie wsteczne wielkimi, \L1małymi literami i \F1pierwszym znakiem wielką, a resztę małymi. Na koniec \I1wstawia go z pierwszą literą każdego wyrazu wielką, a pozostałe małymi.

Źródło: Goyvaerts, styczeń (2006). Wyrażenia regularne: kompletny samouczek . Lulu.com. p. 35 . ISBN 1411677609. Książki Google. Źródło 25 czerwca 2010 r.


6

Możesz to zrobić w jEdicie, używając opcji „Zwróć wartość fragmentu BeanShell” w oknie dialogowym Znajdź i zamień jEdita. Po prostu wyszukaj " [a-z]"i zamień na " _0.toUpperCase()"(bez cudzysłowów)


1
Twoja odpowiedź nie jest tak naprawdę związana z początkowym pytaniem, ale znalazłem ją podczas wyszukiwania w Google i była dokładnie tym, czego szukałem. Wielkie dzieki!
adietisheim

5

Możesz również użyć pierwszej litery dopasowania, używając \I1i \I2etc zamiast $1i $2.


1

Po prostu kolejny przykład ussage dla Notepad ++ (tryb wyszukiwania wyrażenie regularne)

Find: (g|c|u|d)(et|reate|pdate|elete)_(.)([^\s (]+)
Replace: \U\1\E$2\U\3\E$4

Przykład:

get_user -> GetUser
create_user -> CreateUser
update_user -> UpdateUser
delete_user -> DeleteUser
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.