Regex problem

If you are experiencing problems with "Everything", post here for assistance.
Post Reply
Boz
Posts: 6
Joined: Sun Oct 03, 2021 3:11 pm

Regex problem

Post by Boz » Sun Oct 03, 2021 3:41 pm

I've recently started using Everything and am very impressed with it's speed and ease of use.
I have no experience with regex and am not even sure if regex is the right method to use.
The filenames always follows the same format

XXXX-YYYYYY-Iss?

XXXX is a four digit number which defines a component type
YYYYYY is a unique 6 digit number
Iss? is the revision issue, the ? can be any capital letter between A-Z or a number from 1 to whatever.

What I want to do is find the latest revision of a file.

Example of files that might exist

0020-001234-IssA
0020-001234-IssB
0020-001234-IssC
0020-001234-Iss1
0020-001234-Iss2

I want to find the last file 0020-001234-Iss2

I imagine this is a simple task, but one that is beyond me!

Regards

Boz

raccoon
Posts: 684
Joined: Thu Oct 18, 2018 1:24 am

Re: Regex problem

Post by raccoon » Sun Oct 03, 2021 11:29 pm

Would you be willing to adopt a new revision numbering scheme and rename all your files, dropping the A-Z and using 001-999 instead? And also a filename prefix for this family of files? eg:

BOZTOOLZ-0020-001234-rev005

Everything doesn't have a mechanism sort in that order, with letters first and then multi-digit numbers.

I can help you write a batch file to rename the files to this new format.

void
David Carpenter (Developer)
Posts: 9398
Joined: Fri Oct 16, 2009 11:31 pm

Re: Regex problem

Post by void » Mon Oct 04, 2021 12:53 am

Similar to this question..

To match XXXX-YYYYYY-Iss with regex, please try the following search:

regex:File\d-Rev-[A-Z]

regex:\d\d\d\d-\d\d\d\d\d\d-Iss


regex: = enable regular expressions.
\d = match a single digit
I want to find the last file 0020-001234-Iss2
This is trickier to do..
You will need Everything 1.5 alpha or later.

<regex:^(\d\d\d\d-\d\d\d\d\d\d-Iss)A(.*)$ !file-exists:\1B\2 !file-exists:\1C\2> | <regex:^(\d\d\d\d-\d\d\d\d\d\d-Iss)B(.*)$ !file-exists:\1C\2> | <regex:^(\d\d\d\d-\d\d\d\d\d\d-Iss)C(.*)$> | <regex:^(\d\d\d\d-\d\d\d\d\d\d-Iss)1(.*)$ !file-exists:\12\2 !file-exists:\13\2> | <regex:^(\d\d\d\d-\d\d\d\d\d\d-Iss)2(.*)$ !file-exists:\13\2> | <regex:^(\d\d\d\d-\d\d\d\d\d\d-Iss)3(.*)$>

Only Rev A-C and 1-3 is supported with the above.
Is there a Rev higher than C or 3?

Boz
Posts: 6
Joined: Sun Oct 03, 2021 3:11 pm

Re: Regex problem

Post by Boz » Mon Oct 04, 2021 12:17 pm

Thanks for the quick reply.

I'm using 1.5 alpha.
There could be Iss higher than C, H is the highest I have ever seen,
realisticaly the highest numeric value would not exceed 10.

NotNull
Posts: 3658
Joined: Wed May 24, 2017 9:22 pm

Re: Regex problem

Post by NotNull » Mon Oct 04, 2021 4:29 pm

So the old-to-new order is: A B C D E F G H 0 1 2 3 4 5 6 7 8 9 ?

That is quite peculiar, as that is not the alphabetical order. Computerprograms (including Everything) will have problems with that ...

void
David Carpenter (Developer)
Posts: 9398
Joined: Fri Oct 16, 2009 11:31 pm

Re: Regex problem

Post by void » Tue Oct 05, 2021 12:16 am

It's not very practical, but....

Code: Select all

#define:<p[x]=#<:regex:^(\d\d\d\d-\d\d\d\d\d\d-Iss)#x:(.*)$#>:>#define:<e[x]=#<:file-exists:\1#x:\2#>:><#p:<A> !#e:<B> !#e:<C> !#e:<D> !#e:<E> !#e:<F> !#e:<G> !#e:<H> !#e:<I> !#e:<J> !#e:<K> !#e:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<B> !#e:<C> !#e:<D> !#e:<E> !#e:<F> !#e:<G> !#e:<H> !#e:<I> !#e:<J> !#e:<K> !#e:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<C> !#e:<D> !#e:<E> !#e:<F> !#e:<G> !#e:<H> !#e:<I> !#e:<J> !#e:<K> !#e:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<D> !#e:<E> !#e:<F> !#e:<G> !#e:<H> !#e:<I> !#e:<J> !#e:<K> !#e:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<E> !#e:<F> !#e:<G> !#e:<H> !#e:<I> !#e:<J> !#e:<K> !#e:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<F> !#e:<G> !#e:<H> !#e:<I> !#e:<J> !#e:<K> !#e:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<G> !#e:<H> !#e:<I> !#e:<J> !#e:<K> !#e:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<H> !#e:<I> !#e:<J> !#e:<K> !#e:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<I> !#e:<J> !#e:<K> !#e:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<J> !#e:<K> !#e:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<K> !#e:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<X> !#e:<Y> !#e:<Z>>|<#p:<Y> !#e:<Z>>|<#p:<Z>>|<#p:<0> !#e:<1> !#e:<2> !#e:<3> !#e:<4> !#e:<5> !#e:<6> !#e:<7> !#e:<8> !#e:<9>>|<#p:<1> !#e:<2> !#e:<3> !#e:<4> !#e:<5> !#e:<6> !#e:<7> !#e:<8> !#e:<9>>|<#p:<2> !#e:<3> !#e:<4> !#e:<5> !#e:<6> !#e:<7> !#e:<8> !#e:<9>>|<#p:<3> !#e:<4> !#e:<5> !#e:<6> !#e:<7> !#e:<8> !#e:<9>>|<#p:<4> !#e:<5> !#e:<6> !#e:<7> !#e:<8> !#e:<9>>|<#p:<5> !#e:<6> !#e:<7> !#e:<8> !#e:<9>>|<#p:<6> !#e:<7> !#e:<8> !#e:<9>>|<#p:<7> !#e:<8> !#e:<9>>|<#p:<8> !#e:<9>>|<#p:<9>>
#define:

supports A-Z and 0-9

Boz
Posts: 6
Joined: Sun Oct 03, 2021 3:11 pm

Re: Regex problem

Post by Boz » Thu Oct 07, 2021 8:09 pm

Thanks for the reply, the solutions isn't quite want I would like to achieve, in as much that it lists every file that fit the regex expression.
What I would like if possible is to show only the one file, either the highest Issue (Iss) number or the highest letter Issue if there are no numeric Issue exist.

Example taken from set of files:

0020-001437-IssA
0020-001437-IssB
0020-001437-IssC
0020-001437-IssD
Above are pre-production issue files

Below are production files which contain changes to specifications
0020-001437-Iss1
0020-001437-Iss2
0020-001437-Iss3
0020-001437-Iss4
0020-001437-Iss5

I like to be able to show only the file at Iss5 by typing 001437 which is unique 6 digit number in the file system.

e.g.
If I typed for instance 004517 it would display one file with the highest alpha Issue if only pre-production files exist, or
the highest number issue if the file is used in production.

Big ask I think, but thanks trying,

void
David Carpenter (Developer)
Posts: 9398
Joined: Fri Oct 16, 2009 11:31 pm

Re: Regex problem

Post by void » Thu Oct 07, 2021 10:46 pm

Does sorting by name descending help?

The highest rev should be the top result.

NotNull
Posts: 3658
Joined: Wed May 24, 2017 9:22 pm

Re: Regex problem

Post by NotNull » Fri Oct 08, 2021 12:44 am

This is how far I got, but in the end that didn't work out as #eval does not seem to like regex.
And it needs to take care of just pre-production versions (that part should be easy)
Maybe someone else can fix it.

Code: Select all

<  regex:^(0020-001437-Iss)(.)(.*)$      !file-exists:\1<#eval:<1+\2>>\3  >
(relies on some trickery: #eval[1+A] = 1 and #eval[1+5]= 6. Note that #eval[A + 1] = 0 )


This assumes that there are no missing intermediate revisions: if there is lssA and lssD, there will also be lssB and lssC

void
David Carpenter (Developer)
Posts: 9398
Joined: Fri Oct 16, 2009 11:31 pm

Re: Regex problem

Post by void » Fri Oct 08, 2021 2:51 am

Please consider creating a filter, activating this filter and searching for 001437 :
  • In Everything, from the Search menu, click Add to filters...
  • Change the Name to: Highest xxxx-xxxxxx-Issx
  • Change the Search to:

    Code: Select all

    #define:<p[x]=#<:regex:^(\d\d\d\d-\d\d\d\d\d\d-Iss)#x:(.*)$#>:>#define:<e[x]=#<:file-exists:\1#x:\2#>:><#p:<A> !#e:<B> !#e:<C> !#e:<D> !#e:<E> !#e:<F> !#e:<G> !#e:<H> !#e:<I> !#e:<J> !#e:<K> !#e:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<B> !#e:<C> !#e:<D> !#e:<E> !#e:<F> !#e:<G> !#e:<H> !#e:<I> !#e:<J> !#e:<K> !#e:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<C> !#e:<D> !#e:<E> !#e:<F> !#e:<G> !#e:<H> !#e:<I> !#e:<J> !#e:<K> !#e:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<D> !#e:<E> !#e:<F> !#e:<G> !#e:<H> !#e:<I> !#e:<J> !#e:<K> !#e:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<E> !#e:<F> !#e:<G> !#e:<H> !#e:<I> !#e:<J> !#e:<K> !#e:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<F> !#e:<G> !#e:<H> !#e:<I> !#e:<J> !#e:<K> !#e:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<G> !#e:<H> !#e:<I> !#e:<J> !#e:<K> !#e:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<H> !#e:<I> !#e:<J> !#e:<K> !#e:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<I> !#e:<J> !#e:<K> !#e:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<J> !#e:<K> !#e:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<K> !#e:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<L> !#e:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<M> !#e:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<N> !#e:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<O> !#e:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<P> !#e:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<Q> !#e:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<R> !#e:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<S> !#e:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<T> !#e:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<U> !#e:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<V> !#e:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<W> !#e:<X> !#e:<Y> !#e:<Z>>|<#p:<X> !#e:<Y> !#e:<Z>>|<#p:<Y> !#e:<Z>>|<#p:<Z>>|<#p:<0> !#e:<1> !#e:<2> !#e:<3> !#e:<4> !#e:<5> !#e:<6> !#e:<7> !#e:<8> !#e:<9>>|<#p:<1> !#e:<2> !#e:<3> !#e:<4> !#e:<5> !#e:<6> !#e:<7> !#e:<8> !#e:<9>>|<#p:<2> !#e:<3> !#e:<4> !#e:<5> !#e:<6> !#e:<7> !#e:<8> !#e:<9>>|<#p:<3> !#e:<4> !#e:<5> !#e:<6> !#e:<7> !#e:<8> !#e:<9>>|<#p:<4> !#e:<5> !#e:<6> !#e:<7> !#e:<8> !#e:<9>>|<#p:<5> !#e:<6> !#e:<7> !#e:<8> !#e:<9>>|<#p:<6> !#e:<7> !#e:<8> !#e:<9>>|<#p:<7> !#e:<8> !#e:<9>>|<#p:<8> !#e:<9>>|<#p:<9>>
    
  • Change the Macro to: highestiss
  • Click OK.
  • Filters can be activated from the Search menu, Filter bar (View -> Filters), right clicking the status bar, filter macro or filter keyboard shortcut.
  • Please activate this new filter.
  • Type in your search, eg: 001437
or, with the above filter and the Everything filter active, you could use the highestiss macro by searching for:
001437 highestiss:

!file-exists:\1<#eval:<1+\2>>\3 >
Unfortunately, this will not work as #eval: is expanded before the search is executed. (not when file-exists: is evaluated)

Boz
Posts: 6
Joined: Sun Oct 03, 2021 3:11 pm

Re: Regex problem

Post by Boz » Fri Oct 08, 2021 12:23 pm

Thanks void and everyone who took the time to contributed, works great.

I like this program more every time I use it. :D

NotNull
Posts: 3658
Joined: Wed May 24, 2017 9:22 pm

Re: Regex problem

Post by NotNull » Fri Oct 08, 2021 10:05 pm

void wrote:
Fri Oct 08, 2021 2:51 am
Unfortunately, this will not work as #eval: is expanded before the search is executed. (not when file-exists: is evaluated)
Ah, yes, of course. Makes perfect sense (in hindsight :))

void
David Carpenter (Developer)
Posts: 9398
Joined: Fri Oct 16, 2009 11:31 pm

Re: Regex problem

Post by void » Mon Oct 11, 2021 3:29 am

It would be useful.

I have put on my TODO list: expand preprocessor text when evaluating fileexists:
Preprocessor text can be escaped with #<: and #>:

Thanks for the suggestion.

Boz
Posts: 6
Joined: Sun Oct 03, 2021 3:11 pm

Re: Regex problem

Post by Boz » Thu Oct 14, 2021 7:05 pm

I tried the search you sent me, it worked fine on my home computer with dummy data, unfortunately
when I tried it at work I couldn't get any results. The files at work are stored on a NAS server, other searches
I use find files on the NAS server. I created a debug file, but don't how to upload it.

therube
Posts: 3423
Joined: Thu Sep 03, 2009 6:48 pm

Re: Regex problem

Post by therube » Thu Oct 14, 2021 8:32 pm


void
David Carpenter (Developer)
Posts: 9398
Joined: Fri Oct 16, 2009 11:31 pm

Re: Regex problem

Post by void » Thu Oct 14, 2021 10:03 pm

Please zip the Everything debug log.txt and send to support@voidtools.com

If the zip file is larger than 10MB, please let me know.

Boz
Posts: 6
Joined: Sun Oct 03, 2021 3:11 pm

Re: Regex problem

Post by Boz » Thu Oct 21, 2021 6:53 pm

Thanks for looking at the Debug log. It would appear there was some corruption when I change from Version 1.4 to 1.5.

Did a clean install of version 1.5 now all good, I been using the search you gave me at work, absolutely brilliant, I'm very impressed

with Everything, the program I mean.

Thanks again

void
David Carpenter (Developer)
Posts: 9398
Joined: Fri Oct 16, 2009 11:31 pm

Re: Regex problem

Post by void » Thu Jan 20, 2022 5:30 am

Everything 1.5.0.1296a adds an expand: search modifier.

expand: will simplify the file-exists: search for you:

*regex:^(\d\d\d\d-\d\d\d\d\d\d-Iss)(.)(.*)$ !expand:file-exists:#<:\1#char:<#eval:<#unicode:<\2>+1>>\3#>:


Note that the preprocessor text in expand: is escaped with #<: and #>:
This will prevent the preprocessor text from being prematurely expanded.
expand: can use \1 - \9 to reference the previous regular expression capture groups.

Post Reply