Czy użyć Notepad ++, aby zmienić under_score_case na CamelCase?


19

Mogę napisać wyrażenie regularne w NP ++, aby znaleźć under_score_case. Mogę użyć TextFX w NP ++, aby zmienić wielkość liter na wielkie i małe, zaznaczając i wybierając.

Jak można używać zarówno NP ++ 's Find / Replace lub znaleźć TextFX i zastąpić zszyć je razem i konwertować under_score_casedo camelCase?

Chcę się dowiedzieć, jak to zrobić w NP ++, nie używając skryptu.

Przykładowe dane wejściowe:

this is_a_line
some more_data_over_here
whoop de_do_da

Pożądane wyjście:

this isALine
some moreDataOverHere
whoop deDoDa

Wyrażenie pasujące do podkreślników byłoby _([a-z]). Zastępstwo, które, jak sądzę, istnieje, ale nie mogę znaleźć, jest coś w rodzaju _\toupper\1.

Odpowiedzi:


6

Mam rozwiązanie, które jest długie i skomplikowane, ale będzie działać w Notepad ++. Wymaga użycia wyrażenia regularnego, opcjonalnie normalnego wyszukiwania i zamiany, a także TextFX.

  1. Dodaj znak zastępczy na początku każdego słowa, które wybrałem Z. Prawdopodobnie nie musi być alfabetyczny, ale łatwiej jest zrobić ostatni krok. Za pomocą wyrażenia regularnego wyszukaj \<([^ ]*)\>i zamień na Z\1.
  2. Zastąp istniejące spacje unikalną sekwencją symboli zastępczych. Wybrałem # spację #. Można to zrobić za pomocą wyrażenia regularnego, ale wolę używać normalnego lub rozszerzonego.
  3. Zastąp podkreślenia spacjami. Jeśli istnieją podkreślenia, których nie należy zastępować, prawdopodobnie wymagana jest niestandardowa regex. Właśnie wykonałem proste wyszukiwanie i zamieniłem.
  4. Zaznacz cały tekst, a następnie z menu TextFX wybierz TextFX Characters -> Proper Case.
  5. Teraz musimy cofnąć pierwsze 3 kroki. Wyszukaj spacje i zamień je na nic. Następnie wyszukaj sekwencję symboli zastępczych spacji i zastąp ją spacją. Na koniec, używając wyrażenia regularnego, wyszukaj \<Z([^ ]*)\>i zamień na \1.

Zawiłe, ale działa.
Freiheit,

Błędy Notepad ++ w wyrażeniach regularnych spowodowały, że wcześniej wymyśliłem takie rozwiązania, szczególnie gdy muszę znaleźć i zamieniać linie lub używać znaków specjalnych, takich jak tab.
MBraedley,

Nawiasem mówiąc, czy projekt prowadzony w NP ++ (jak Ho przypominam sobie pana Ho) wydał jakieś dźwięki na temat wprowadzenia wsparcia zastępującego vim? Jakieś wtyczki to obsługują? NP ++ i TextFX są naprawdę potężne, potrzebują tylko trochę więcej, aby połączyć je ze sobą.
Freiheit,

Tak naprawdę nie śledzę tego projektu, ale wyobrażam sobie, że jest ograniczony przez użycie Scintilli.
MBraedley,

1
Jedno zastrzeżenie: jeśli drugi i kolejny znak w każdym słowie jest wielką literą, jest on pisany małymi literami, np . ALL_CAPSStaje się allCaps.
Gnubie

15

Proste wyszukiwanie / zamiana zrobi to w NP ++:

Odnaleźć: [_]{1,1}([a-z])

Zastąpić: \U$1

Aby to zadziałało, musisz wybrać przycisk opcji „Wyrażenie regularne” w panelu Zamień.


5
Lub po prostu _(.)jako ciąg wyszukiwania.
Dominic Comtois

Jeśli chcesz PascalCase (w jednym kroku), możesz użyć Znajdź: (?:^|_)([a-z]) Zamień: \U$1$2
Rubenisme

6

Zwykle używam samego vima jako edytora. Poniższe wyrażenie regularne realizuje to, co próbujesz zrobić w vimie:

%s/_\([a-zA-Z]\)/\u\1/g

Z tego, co mogę powiedzieć ( trochę wygłupiałem się z NP ++ ), Notepad ++ nie rozumie makra \upisanego wielkimi literami w Perl Regexp. Możesz nie być w stanie zrobić tego całkowicie za pomocą Notepad ++. Mam nadzieję, że ktoś udowodni, że się mylę i sprawi, że twój dzień.


Tak, utknąłem w środowisku Windows. Kopiowanie danych na maszynę * nix lub OS X działa, ale nie jest tak płynne. Mogę również trenować innych członków drużyny w NP ++.
Freiheit

Myślę, że to samo wyrażenie działa w eMacach. Moja wiedza na temat eMaca jest niejasna. . .
surfasb

@Freiheit Istnieje vim dla Windows; chociaż to nie pomoże w krzyżowaniu innych członków drużyny do NP ++
Matrix Mole

To wydaje się działać dobrze w najnowszych wersjach Notepad ++ (używam 6.7.7).
levant pied

3

Możesz to zrobić w jednym kroku w Notatniku ++, co jest prawdopodobnie bardziej przydatne:

Find: ([a-z]+)[_]?([a-z]?)([a-z]+)[_]?([a-z]?)([a-z]+)[_]?([a-z]?)([a-z]+)\.php
Replace: $1\U$2\L$3\U$4\L$5\U$6\L$7

Jedynym problemem jest to, że musisz znać maksymalny czas, w którym wynik niedociążenia może być obecny i jak kończy się struna. W powyższym przykładzie zamieniam nazwy plików php na camelCase, wiedząc, że wynik poniżej nie może być obecny więcej niż 3 razy, mniej nie stanowi problemu.


2

Moim ulubionym jest sed. Błyskawicznie:

> echo make_me_camel_case_please | sed -e 's / (_ [az]) / \ U \ 1 / g' -e 's / _ // g'

makeMeCamelCasePlease

Możesz użyć opcji -i, aby wykonać zamianę na edytowanym pliku, a N ++ powinien przejąć zmianę.

Spowoduje to również usunięcie wszystkich znaków podkreślenia, jak w przypadku niektórych powyższych rozwiązań. Można to naprawić, jeśli jest to problem.


2
  • Konwertuj przypadek węża Mógłbym to zrobić za pomocą Notepad ++, wykonując poniższe kroki.

  • Konwertuj dane w postaci węża na wszystkie małe litery, jeśli nie są już pisane małymi literami

  • Otwórz formularz Zamień ( Wyszukaj-> Zamień LUB Ctrl + H )
  • Sprawdź przycisk radiowy Wyrażenie regularne
  • Szukaj _([a-z])OR_(.)
  • Zamień na \u\1dane wejściowe

0

Pracuję z Notepad ++ 7.3. Miałem ten sam problem i wykonałem następujące czynności:

  1. Ctrl+ H(pokaż formularz wyszukiwania)
  2. Sprawdź przycisk radiowy Wyrażenie regularne
  3. Poszukaj «_ ([az] +)»
  4. Zamień na «\ u \ 1»

I działał!


To zmieniłoby wszystkie litery na małe, a następnie wielkie litery, które następują po podkreśleniu, prawda? Czy We use the bean_counter variable, which was Fred's ideazmieniono by na we use the beanCounter variable, which was fred's idea(zmniejszanie wielkich liter, które już były wielkie litery)? To wydaje się niezadowalające.
Scott,

Dziękuję, Scott, nie do końca zrozumiałem ten pomysł, więc mam nadzieję, że teraz będzie dobrze.
Francisco M

Tak, tak jest lepiej. Prawdopodobnie możesz to trochę uprościć: po prostu poszukaj «_ ([az])» (bez +). Niestety jest to obecnie w zasadzie odpowiednik kilku poprzednich odpowiedzi.
Scott

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.