Pytanie o wyrażenie regularne

Pytanie o wyrażenie regularne
BA
  • Rejestracja:prawie 16 lat
  • Ostatnio:8 miesięcy
0

Czy za pomocą wyrażeń regularnych mogę zastąpić masowo w tekście liczby według formuły (n)a -> (n+1)a, gdzie zawartość nawiasu jest liczbą całkowitą, a litera "a" jest literą a?

Mam na myśli coś takiego:

Zawsze, gdy w tekście napotkany zostanie ciąg "liczba z literą a", zastąp liczbę liczbą większą o jeden.

Czyli:

Kopiuj
33a jakiś tekst pomiędzy  44a 7a 155a o i znowu jakiś tekścik 3687a 14a 9929561a 317a

Powinno zostać zamienione na:

34a jakiś tekst pomiędzy 45a 8a 156a o i znowu jakiś tekścik 3688a 15a 9929562a 318a

Oczywiście chodzi mi o jeden wzór, który zamieni wszystkie te liczby, a także inne z literą a.

Damy radę?

NO
  • Rejestracja:około 14 lat
  • Ostatnio:około 8 lat
0

wyrażenia regularne generalnie nie mają w sobie zamieniania, one mogą tylko parsować, albo wyłuskiwać dane

edytowany 1x, ostatnio: notexists
RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:12 miesięcy
0

Same wyrażenia regularne nie mają możliwości zamiany czegokolwiek. To, czy będziesz mógł to zrobić, zależy od konkretnej implementacji. W php na przykład w prosty sposób można to zrobić czymś w stylu preg_replace, wyrażeniu \d+ z modyfikatorem e i funkcji return \\1+1.

BA
  • Rejestracja:prawie 16 lat
  • Ostatnio:8 miesięcy
0

No dobra, ale mogę choćby w Notepadzie++ zrobić formułę, która zmieni drugą część tego stringu np:

(\d+)a\s

na

$1b\s

i zamieni mi 376a na 376b .Chciałbym, żeby pierwszą podniosła zawsze o jeden. Już słyszałem, że samym RegExem raczej się nie da, ale aż mi się wierzyć nie chciało, że nikt czegoś takiego do wyrażeń regularnych nie zaimplementował.

PS. Dla mnie wyrażenia regularne, to synonim masowej zamiany ;-)

NO
  • Rejestracja:około 14 lat
  • Ostatnio:około 8 lat
0

niestety wyrażenie regularne, to synonim szukania ciągu znaków;D

BA
  • Rejestracja:prawie 16 lat
  • Ostatnio:8 miesięcy
0

W celu zastąpienia, go innym ciągiem znaków ;-)

Kurcze, niech tu wpadnie jakiś cudotwórca i poda jak to zrobić w samym Notepadzie ++ :)

edytowany 2x, ostatnio: Bakcyl
madmike
  • Rejestracja:ponad 19 lat
  • Ostatnio:ponad 5 lat
0

Nie sprawdzałem, ale może plugin do Notepad++: RegRexPlace.

Opis napisał(a)

RegRexPlace: a plugin to do "regular regular-expression replaces". Useful when you have often-used regex replacements. I personally use this when writing posts on forums, so I can use my own simplified markup and automatically generated BBCode markup from that. A sample .ini file is included.


NO
  • Rejestracja:około 14 lat
  • Ostatnio:około 8 lat
0

a czemu potrzebujesz to akurat wyrażeniami regularnymi zrobić?;>

BA
  • Rejestracja:prawie 16 lat
  • Ostatnio:8 miesięcy
0

Bo jestem leniwy, a wyrażeniami regularnymi byłoby prosto. Z drugiej strony nawet, jeśli wymędzę od kogoś gotowy skrypt, który coś tam zmieni, to nie będę znał zasady, bo raczej będzie zawierał kilka linijek, których nie będę rozumiał - a ja ambitny leń jestem. No i pat ; -)

Przejrzę to rozszerzenie. Ciekawe czemu na starcie wywalam wszystkie rozszerzenia i nawet nie pamiętam, że jest taka możliwość.

NO
  • Rejestracja:około 14 lat
  • Ostatnio:około 8 lat
0

ja bym napisał kilkulinijkowy (tak może z 10-15 z obsługą plików) programik w javie, który by to zrobił, z wykorzystaniem wyrażeń regularnych ale inkrementację już bez wyrażeń, tak by chyba było najszybciej

BA
  • Rejestracja:prawie 16 lat
  • Ostatnio:8 miesięcy
0

Java to już w ogóle profesjonalna rzecz ; -)

Planuję nauczyć się pythona tak dla siebie, ale mi się to odracza ;) Coś tam napisałem w Autohotkeyu drobnego na własne potrzeby kilka razy. W sprawie wyrażeń ktoś napisał jak pisać skrypt do tego [z użyciem RegExMatch()] sugerując, że w samym regexie się nie da, ale nie chciało mi się aż wierzyć. Jakby ktoś pisał skrypt, to musiałby być z objaśnieniami łopatologicznymi, bym łyknął zasadę ; -)

W Autohotkeyu do regexu stosuję RegExReplace(). RegExMatch() nie za bardzo rozumiem, do czego może się przydać i w ogóle chyba powierzchownie jarzę tę funkcję. Hm, gdyby chociaż dało się upchnąć w wyrażenie regularne zmienną, to dało by się wpakować formuły matematyczne w regex.

NO
  • Rejestracja:około 14 lat
  • Ostatnio:około 8 lat
0

match służy właśnie do parsowania, wyrażenie.match(tekst) dostajesz true albo false

wierzyć nie musisz, ale wyrażenia regularne to nie język programowania i wielu rzeczy nie potrafią, chociaż też są fajne;D

myślę, że by się to dało zrobić samymi wyrażeniami, ale na pewno nie jednym:
dla liczb kończących się 0-8 masz 9 wyrażeń zamieniających tą liczbę na kończącą się odpowiednio na 1-9
a dla kończących się na ciąg dziewiątek, zamieniasz ostatnią dziewiątkę na niewystępujący w tekście kod i znowu uruchamiasz wyrażenia na początkowej częsci liczby:

  1. albo w końcu natrafisz na jakąś 0-8 i zamienisz ją na 1-9
  2. albo liczba się skończy i wtedy dodasz 1 na samym początku

i na koniec niepowtarzalnykod zamieniasz na 0

co razem daje całkiem sporo wywołań różnych wyrażeń;D
lepiej to zrobić programem;p

BA
  • Rejestracja:prawie 16 lat
  • Ostatnio:8 miesięcy
0

Dziś rano niezależnie wpadłem na ten pomysł i też na inny -> na skrypt skryptotwórcę, który wytworzy tysiące potrzebnych formuł po kolei ;)

Niemniej jestem świadom dziadostwa tych metod ;)

Pomyślę jak to zrobić w Autohotkeyu. Szkoda, że nie ma do niego polskiej społeczności, bo to dla amatora jest fajny język.

hauleth
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:20 dni
0

Przykład w Perlu (z Wiki):

Kopiuj
$_ = "Magiczna liczba to 150\n";
print;
s/ (\d+)a / $1+a /ex;
print;

BA
  • Rejestracja:prawie 16 lat
  • Ostatnio:8 miesięcy
0

No tak Perl podobno wymiata, jeśli chodzi o RegEx, ale bardziej przyszłościowy ogólnorozwojowo jest Python (z tego, co kiedyś tu ustaliłem). Skoro mam go zacząć, to chyba to jest dobry moment. Może poproszę kogoś o przetłumaczenie skryptu z AutoHotKeya, którego używam jako szablonu do RegExu do Pythona (najlepiej 3) i wstawienie właśnie tej formułki z dodawaniem, zamiast tej, która zmienia drugą część wyrażenia. Po średnikach są komentarze - 80 % treści ;)

Kopiuj
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
#SingleInstance force ;	Polecenie, które w przypadku, ponownego uruchomienia już działającego skryptu zastępuje starą wersję nową.

FileRead, zmienna1, zrodlo.txt ; Polecenie FileRead wczytuje zawartość pliku tekstowego zrodlo.txt znajdującego się w tym samym katalogu, co skrypt do zmiennej zmienna1

zmienna2 := RegExReplace(zmienna1,"(\d+)a", "$1b") ; RegExowe przetwarzanie treści zmiennej zmienna1 według potrzeb zdefiniowanych w cudzysłowach i stworzenie z wyniku przekształceń zmiennej zmienna2. Tu użyłem wzoru przekształcającego drugą część wyrażenia.  

FileAppend, %zmienna2%, efekt.txt, UTF-8 ; FileAppend zapisuje tekst ze zmiennej zmienna2 na końcu pliku efekt.txt w tym samym katalogu, w którym znajduje się plik zrodlo.txt oraz skrypt. Jeśli plik efekt.txt nie istnieje, to zostaje utworzony. Znajdująca się na końcu deklaracja kodowania UTF-8 pozwala zapisać tekst z użyciem Unicode (wymaga użycia forka Autohotkeya - Autohotkey_L) 
edytowany 2x, ostatnio: Bakcyl
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)