doubling the number of tests, but not taking twice as long
Larry Martell
larry.martell at gmail.com
Wed Jul 18 17:40:44 EDT 2018
On Tue, Jul 17, 2018 at 11:43 AM, Neil Cerutti <neilc at norwich.edu> wrote:
> On 2018-07-16, Larry Martell <larry.martell at gmail.com> wrote:
>> I had some code that did this:
>>
>> meas_regex = '_M\d+_'
>> meas_re = re.compile(meas_regex)
>>
>> if meas_re.search(filename):
>> stuff1()
>> else:
>> stuff2()
>>
>> I then had to change it to this:
>>
>> if meas_re.search(filename):
>> if 'MeasDisplay' in filename:
>> stuff1a()
>> else:
>> stuff1()
>> else:
>> if 'PatternFov' in filename:
>> stuff2a()
>> else:
>> stuff2()
>>
>> This code needs to process many tens of 1000's of files, and it
>> runs often, so it needs to run very fast. Needless to say, my
>> change has made it take 2x as long. Can anyone see a way to
>> improve that?
>
> Can you expand/improve the regex pattern so you don't have rescan
> the string to check for the presence of MeasDisplay and
> PatternFov? In other words, since you're already using the giant,
> Swiss Army sledgehammer of the re module, go ahead and use enough
> features to cover your use case.
Yeah, that was my first thought, but I haven't been able to come up
with a regex that works.
There are 4 cases I need to detect:
case1 = 'spam_M123_eggs_MeasDisplay_sausage'
case2 = 'spam_M123_eggs_sausage_and_spam'
case3 = 'spam_spam_spam_PatternFov_eggs_sausage_and_spam'
case4 = 'spam_spam_spam_eggs_sausage_and_spam'
I thought this regex would work:
'(_M\d+_){0,1}.*?(MeasDisplay|PatternFOV){0,1}'
And then I could look at the match objects and see which of the 4
cases it was. But try as I might, I could not get it to work. Any
regex gurus want to tell me what I am doing wrong here?
More information about the Python-list
mailing list