Wykonaj wiele wyrażeń regularnych jeden po drugim lub połącz wiele wyrażeń regularnych w jeden


0

Używam notatnika ++, napisałem kilka wyrażeń regularnych, które ułatwiły mi pracę nad formatowaniem pliku. Jednak, aby sformatować plik w żądanym formacie, muszę wykonać wiele wyrażeń regularnych, chciałem wiedzieć, czy istnieje jakiś możliwy sposób, w którym będę przechowywać moją listę wyrażeń regularnych i będzie ona wykonywana jedna po drugiej.

Oto plik tree.txt, który należy sformatować.

overview/Main_Overview/Gas Management/BOG MV/BOG MV Process Alarms:Tag=BOG Heaters Process Alarms:Device=:Color=-3355444
overview/Main_Overview/Gas Management/BOG MV/BOG MV Process Trip:Tag=BOG Heaters Process Alarms-1:Device=:Color=-3355444
overview/Main_Overview/Gas Management/BOG MV/BOG MV External Trip:Tag=BOG Heaters Process Alarms-1-1:Device=:Color=-3355444

Wyrażenie regularne zostanie obcięte nad tekstem i ustawione w tym formacie sed.

s/BOG Heaters Process Alarms:/BOG MV Process Alarms:/g
s/BOG Heaters Process Alarms-1:/BOG MV Process Trip:/g
s/BOG Heaters Process Alarms-1-1:/BOG MV External Trip:/g

Aby osiągnąć powyższy wynik, wykonam kilka operacji wyrażenia regularnego jedna po drugiej.

Find- .*/
Replace- 

Find- Device=:.*
Replace- 

Find- :Tag=
Replace- /

Find- (^.*/)([^/]+):
Replace- /\2/ \1

Find- ^
Replace- s

Find- $
Replace- g

Po powyższym wyrażeniu regularnym otrzymuję żądany format, ale muszę wiedzieć, czy można go połączyć, aby nie trzeba było wykonywać ręcznie po zakończeniu każdego wyrażenia lub zredukować do jednego wyrażenia. Dzięki


Odpowiedzi:


0

Masz już potrzebne elementy, zwłaszcza grupowanie. Musisz znaleźć:

^.*/(.*:)Tag=(.*:)Device=.*$

Następnie zamień na:

s/\2/\1/g

Zauważ, że daje to sedparametry, które podajesz jako to, co chcesz wytworzyć, podczas gdy sekwencja pomija dwukropek w ciągu sedwyszukiwania i dodaje wiodące puste miejsce w ciągu sedzastępującym, dając:

s/BOG Heaters Process Alarms/ BOG MV Process Alarms:/g
s/BOG Heaters Process Alarms-1/ BOG MV Process Trip:/g
s/BOG Heaters Process Alarms-1-1/ BOG MV External Trip:/g

Aby odtworzyć sekwencję, musisz wyszukać:

^.*/(.*):Tag=(.*:)Device=.*$

Następnie zamień na:

s/\2/ \1/g

Jednak sedzamiany nie będą działać, chyba że zostaną wykonane w odwrotnej kolejności.


Dzięki, że zadziałało, nie wiedziałem, że możemy grupować w ten sposób.
gadhvi
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.