/ / Spacje wokół wszystkich łączników w ciągu bez podwojenia - wyrażenie regularne

Odstępy wokół wszystkich łączników w ciągu bez podwojenia - wyrażenie regularne

Po wyrażeniu regularnym, które umieszcza spacje wokół "-" w ciągu znaków, np.

02 jaguar-leopard, tiger-panther 08

stanie się

02 jaguar - leopard, tiger - panther 08

Zwróć uwagę, że jeśli "-" zawiera już spacje, nie należy wprowadzać żadnych zmian, np.

02 jaguar - leopard, tiger - panther 08

nie powinno się stać

02 jaguar  -  leopard, tiger  -  panther 08

Liczba myślników nie jest znana z góry.

Dzięki za wszelkie pomysły ...

Edytować: Właściwie nie używam w tym celu języka Ant Renamer (narzędzie do zmiany nazwy pliku masowego). W interfejsie graficznym renamera znajdują się dwa pola, "Wyrażenie" i "Nowa nazwa", w celu zapewnienia danych wejściowych. Jest to z pliku pomocy jako przykład:

Zamiana wykonawcy i tytułu z nazw plików mp3:

Wyrażenie = (.) - (.) .mp3

Nowa nazwa = 2 USD - 1 USD

i

Wyodrębnij numer odcinka i tytuł z serii plików wideo z numerem odcinka jako SnnEmm, a następnie tytuł:

Wyrażenie = Code.Quantum.S ([0-9] {2}) E ([0-9] {2}). (. *). FRENCH.XViD.avi

Nowa nazwa = Code Quantum - 1 $ 2 $ - 3 $ .avi

Odpowiedzi:

4 dla odpowiedzi № 1

Zastąpić _*-_* z _-_ (zamień podkreślenia na spacje przed użyciem wzorca).

W ten sposób wszelkie istniejące przestrzenie wokół łącznika zostaną zastąpione nowo wstawionymi spacjami.


2 dla odpowiedzi nr 2

Szukaj:

(?:(S)| )-(?:(S)| )

Zastąpić:

$1 - $2

Zauważ, że Twoje narzędzie może używać odwrotnych ukośników do odsyłaczy wstecz, może być konieczne 1 - 2 zamiast.


1 dla odpowiedzi nr 3

Najprawdopodobniej będziesz potrzebować dwóch wyrażeń do wykonania tego zadania.

  1. Zastąpić (?<=S)- z " -"
  2. Zastąpić -(?=S) z "- "

JSBin: http://jsbin.com/UTUZADe/1/edit?js,console (Musiałem użyć innej metody dla # 1, JS nie obsługuje niestety asercji look-ahead niestety)