/ / Regex na vylúčenie určitých prípon súborov -

Regex vylúčiť určité prípony súborov - regex

boli položené podobné otázky, ale chýba im jedna vec, ktorú musím urobiť, a ja to nedokážem zistiť.

Musím nájsť všetky súbory, ktoré NIE SÚrozšírenie tif alebo tiff, ale musím nájsť všetky ostatné, vrátane tých, ktoré nemajú rozšírenie. Mám prvú časť, ktorá pracuje s regexom nižšie, ale toto nezodpovedá súborom bez prípony.

^(.+).(?!tif$|tiff$).+$

Funguje to skvele, ale potrebujem nasledujúce.

filename.ext MATCH
filename.abc MATCH
filename.tif FAIL
filename     MATCH

Vďaka :)

odpovede:

1 pre odpoveď č. 1

Ak nepracujete s regulárnym jazykom JS / ECMAscript, môžete použiť:

^.*(?<!.tif)(?<!.tiff)$

0 pre odpoveď č. 2

Skôr než písať negatívny regulárny výraz, zvážte použitie jednoduchšieho a pozitívneho regulárneho výrazu, ale ak niečo urobíte, podniknite kroky nie zápas. Toto je často vynikajúci prístup.

Nemôže byť použitý v každej situácii (napr. Ak používate nástroj príkazového riadku, ktorý vyžaduje, aby ste špecifikovali čo robí ), ale urobil by som to tam, kde je to možné.


0 pre odpoveď č. 3

Toto funguje pre mňa:

^(?:(.+.)((?!tif$|tiff$)[^.]*)|[^.]+)$

Regex je rozdelený na dve rôzne časti:

Časť 1: (.+).((?!tif$|tiff$)[^.]*)

  • (.+) (1. zachytávacia skupina) Priraďte názov súboru (prípadne obsahujúci bodky)
  • . Zhoda s poslednou bodkou reťazca (pred príponou).
  • ((?!tif$|tiff$)[^.]*) (2. zachytávacia skupina) Potom skontrolujte, či je bodka nie nasledovaný presne "tif"alebo"hašterenie“a ak áno, zodpovedajú rozšíreniu.

Časť 2: [^.]+ Ak sa časť 1 nezhoduje, skontrolujte, či máte iba názov súboru, ktorý neobsahuje bodku.


0 pre odpoveď č. 4

Ak máte v textovom súbore nejaké reťazce (ktorý má nový riadok):

perl -lne "/(?:tiff?)/ || print" file

Ak máte nejaké súbory v adresári:

ls | perl -lne "/(?:tiff?)/ || print"

Screen-shot:

tu zadajte popis obrázku


0 pre odpoveď č. 5

Tu som uviedol:

^[^.s]+(.|s)(?!tiff?)

vysvetlenie:

Začiatok riadka na bodku alebo medzeru, dajte okolo toho svoju zodpovedajúcu skupinu, tj:

^(?<result>[^.s]+)

Potom bude hľadať bodku alebo medzeru s negatívnym hľadáčikom na tiffe (tiff? Bude zodpovedať tif aj tiff).

To predpokladá, že za názvom súboru bude vždy bodka alebo medzera. Toto môžete zmeniť na koniec riadku, ak to potrebujete:

^[^.s]+(.(?!tiff?)|n)   linux
^[^.s]+(.(?!tiff?)|rn) windows