RegEx Rename fail in 4.3
Moderators: fgagnon, nikos, Site Mods
-
- Silver Member
- Posts: 244
- Joined: 2004 Jun 16, 15:09
RegEx Rename fail in 4.3
The arrival of RegEx for Mass Rename is most welcome, but alas! my first test out of the box was a fail. I tried renaming camelCase to snake_case, and vice versa. Here's what happened:
filename = camelCaseToSnakeCase.txt
regexp = (.+?)([A-Z])
replace with = $1_$2
expected result = camel_Case_To_Snake_Case.txt
result = c_am_el_Ca_se_To_Sn_ak_eC_as_e.txt
The quantifier +? should match unlimited times, until it gets to [A-Z], should it not? Why are letters being grouped in two?
If we add the \L token to get lowercase words, it gets worse!
filename = camelCaseToSnakeCase.txt
regexp = (.+?)([A-Z])
replace with = \L$1_\L$2
expected result = camel_Case_To_Snake_Case.txt
result = _Lc__La_Lm__Le_Ll__LC_La__Ls_Le__LT_Lo__LS_Ln__La_Lk__Le_LC__La_Ls__Le.txt
Is the \L token not supported?
snake_case to camelCase also presents problems:
filename = snake_case_to_camel_case.txt
regexp = (.*?)_([a-zA-Z])
replace with = $1\U$2
expected result = snakeCaseToCamelCase.txt
result = snake_Ucase_Uto_Ucamel_Ucase.txt
Seems the \U token is also a problem.
The RegEx I'm using here is pretty standard - is x2 using its own flavor of RegEx? Am I missing something obvious?
(x2 PRO 4.3.0.0 64-bit running on Win 10 1809)
filename = camelCaseToSnakeCase.txt
regexp = (.+?)([A-Z])
replace with = $1_$2
expected result = camel_Case_To_Snake_Case.txt
result = c_am_el_Ca_se_To_Sn_ak_eC_as_e.txt
The quantifier +? should match unlimited times, until it gets to [A-Z], should it not? Why are letters being grouped in two?
If we add the \L token to get lowercase words, it gets worse!
filename = camelCaseToSnakeCase.txt
regexp = (.+?)([A-Z])
replace with = \L$1_\L$2
expected result = camel_Case_To_Snake_Case.txt
result = _Lc__La_Lm__Le_Ll__LC_La__Ls_Le__LT_Lo__LS_Ln__La_Lk__Le_LC__La_Ls__Le.txt
Is the \L token not supported?
snake_case to camelCase also presents problems:
filename = snake_case_to_camel_case.txt
regexp = (.*?)_([a-zA-Z])
replace with = $1\U$2
expected result = snakeCaseToCamelCase.txt
result = snake_Ucase_Uto_Ucamel_Ucase.txt
Seems the \U token is also a problem.
The RegEx I'm using here is pretty standard - is x2 using its own flavor of RegEx? Am I missing something obvious?
(x2 PRO 4.3.0.0 64-bit running on Win 10 1809)
Re: RegEx Rename fail in 4.3
I am not very competent with regular expressions, but the available syntax is explained here:
http://www.regexlab.com/en/deelx/syntax.htm
http://www.regexlab.com/en/deelx/syntax.htm
Re: RegEx Rename fail in 4.3
Hello @Longfellow, @Nikos
I can confirm the observation of @Longfellow above.
I just tested the Syntax for the "camelCaseToSnakeCase.txt" with the Free-Tool Mtrace.zip (MTracerFree_2.1.msi ->Mtracer.exe)
filename = camelCaseToSnakeCase.txt
regexp = (.+?)([A-Z])
replace with = $1_$2
expected result = camel_Case_To_Snake_Case.txt
result = camel_Case_To_Snake_Case.txt
Therefore my conclusion is : xplorer4.3 seems to have a small problem, which needs to be solved.
P.S. MTracerPro3.zip (MTracerUnicodePro_3.0.msi -> MTracer.exe) is not a Free-Tool, but gives the same 'good' result as Mtracer_2.1)
Both can be found on the Website www.regexlab.com
-------------------------------------------
I can confirm the observation of @Longfellow above.
I just tested the Syntax for the "camelCaseToSnakeCase.txt" with the Free-Tool Mtrace.zip (MTracerFree_2.1.msi ->Mtracer.exe)
filename = camelCaseToSnakeCase.txt
regexp = (.+?)([A-Z])
replace with = $1_$2
expected result = camel_Case_To_Snake_Case.txt
result = camel_Case_To_Snake_Case.txt
Therefore my conclusion is : xplorer4.3 seems to have a small problem, which needs to be solved.
P.S. MTracerPro3.zip (MTracerUnicodePro_3.0.msi -> MTracer.exe) is not a Free-Tool, but gives the same 'good' result as Mtracer_2.1)
Both can be found on the Website www.regexlab.com
-------------------------------------------
Re: RegEx Rename fail in 4.3
the regexp code is offered by DEELX which is outside my control and understanding. Please check the link above for the supported syntax. Not all regexp engines work the same
Re: RegEx Rename fail in 4.3
Hello @nikos
DEELX - Regular Expression Engine (v1.2) Research project of RegExLab. i.e. all Tutorial and other stuff refer with all syntax rules which you pointed out.
Therefore take my analysis for the problem above as real.
THE both tools (mtracer) are standalone Tools based on DEELX and helps to debug such situations,
Do you agree ?
DEELX - Regular Expression Engine (v1.2) Research project of RegExLab. i.e. all Tutorial and other stuff refer with all syntax rules which you pointed out.
Therefore take my analysis for the problem above as real.
THE both tools (mtracer) are standalone Tools based on DEELX and helps to debug such situations,
Do you agree ?
Re: RegEx Rename fail in 4.3
Just for those , interested in that case :
- Have fun !
-------------------------------------
The referenceS for DEELX Users :: http://www.regexlab.com/
Get Started with Regular Expression :: http://www.regexlab.com/start
DEELX Regular Expression Syntax :: http://www.regexlab.com/en/deelx/syntax.htm
Tutorial-Regular Expression Syntax :: http://www.regexlab.com/en/regref.htm
Reg.Expression Compose and Test Tool :: http://www.regexlab.com/mtracer/
------------------------------------
- Have fun !
-------------------------------------
The referenceS for DEELX Users :: http://www.regexlab.com/
Get Started with Regular Expression :: http://www.regexlab.com/start
DEELX Regular Expression Syntax :: http://www.regexlab.com/en/deelx/syntax.htm
Tutorial-Regular Expression Syntax :: http://www.regexlab.com/en/regref.htm
Reg.Expression Compose and Test Tool :: http://www.regexlab.com/mtracer/
------------------------------------
Re: RegEx Rename fail in 4.3
ok I see the problem now is that I defined the regexp as ignoring the case of letters. Changing it to "case sensitive" would work for this example, however, as in windows filenames are not case sensitive, there could be other cases where two files with different capitalizations e.g.
FILE1.txt
file2.txt
wouldn't be covered in one go. I am not sure which glitch is more serious? It is either supporting changing filename case, versus freeform search and replace
FILE1.txt
file2.txt
wouldn't be covered in one go. I am not sure which glitch is more serious? It is either supporting changing filename case, versus freeform search and replace
Re: RegEx Rename fail in 4.3
Hello @nikos,
Yes, it might be a hard task - but I do believe the 'free-form' gives you the best solution value.
You may have a look to the different forms of the cases.
Thanks for acknowledging the basic problem and taking the burden to ease our life.
------------------------------------------------------------------------------------------------
Case Styles: Camel, Pascal, Snake, and Kebab Case and its variants
are combining words into a single string for better human reading.
These are the popular ways to combine words to form a single concept.
This convention is often used in variable declaration and/or filenames in many languages
Which is best?
There is no best method of combining words.
The main thing is to be consistent with the convention used, and,
if you’re in a team, to come to an agreement on the convention together
------------------------------------------------------------------------------------------------
Camel Case (camelCase) also known as 'camel caps','medial capitals' [iPhone]
combines words by capitalizing all words following the first word and removing the space
(lang: java , javascript , ....(more) )
Pascal Case (PascalCase) known also as 'upper camel case'
combines words by capitalizing all words (even the first word) and removing the space
(lang: Pascal, Modula, ....(more) )
Snake Case (snake_case, SANKE_CASE, Snake_Case)
combines words by replacing each space with an underscore (_) and,
in the all caps version, all letters are capitalized and,
in the Title version, only the first Letter of each word are Capital(s).
(lang: C, C++, ruby, ....(more) )
Kebab Case (kebab-case)
combines words by replacing each space with a dash (-)
(lang: emacs lisp, ....(more) )
mixed camelCase and snake_case
(lang: python, php, perl, ...(more) )
Yes, it might be a hard task - but I do believe the 'free-form' gives you the best solution value.
You may have a look to the different forms of the cases.
Thanks for acknowledging the basic problem and taking the burden to ease our life.
------------------------------------------------------------------------------------------------
Case Styles: Camel, Pascal, Snake, and Kebab Case and its variants
are combining words into a single string for better human reading.
These are the popular ways to combine words to form a single concept.
This convention is often used in variable declaration and/or filenames in many languages
Which is best?
There is no best method of combining words.
The main thing is to be consistent with the convention used, and,
if you’re in a team, to come to an agreement on the convention together
------------------------------------------------------------------------------------------------
Camel Case (camelCase) also known as 'camel caps','medial capitals' [iPhone]
combines words by capitalizing all words following the first word and removing the space
(lang: java , javascript , ....(more) )
Pascal Case (PascalCase) known also as 'upper camel case'
combines words by capitalizing all words (even the first word) and removing the space
(lang: Pascal, Modula, ....(more) )
Snake Case (snake_case, SANKE_CASE, Snake_Case)
combines words by replacing each space with an underscore (_) and,
in the all caps version, all letters are capitalized and,
in the Title version, only the first Letter of each word are Capital(s).
(lang: C, C++, ruby, ....(more) )
Kebab Case (kebab-case)
combines words by replacing each space with a dash (-)
(lang: emacs lisp, ....(more) )
mixed camelCase and snake_case
(lang: python, php, perl, ...(more) )
-
- Silver Member
- Posts: 244
- Joined: 2004 Jun 16, 15:09
Re: RegEx Rename fail in 4.3
Hi hajubu! Thanks for checking and confirming this!
Hi Nikos! Thanks for the link to the syntax you're using. This page (http://www.regexlab.com/en/deelx/syntax/bas_esc.htm) suggests that characters can be upper- or lower-cased using quoted characters (beginning with \U or \L, and ending with \E). I played around with this but couldn't get it to work. Perhaps it is, as you have pointed out, that the regexp is set to ignore case.
Really, we have to choose between changing case versus free-form search and replace? We want both! Changing case is often required in renaming files; it's too valuable a feature to give up. As for finding FILE1.txt and file2.txt in searches, it shouldn't be too hard for anyone using RegEx to define both lowercase and uppercase characters in their search terms.
Hi Nikos! Thanks for the link to the syntax you're using. This page (http://www.regexlab.com/en/deelx/syntax/bas_esc.htm) suggests that characters can be upper- or lower-cased using quoted characters (beginning with \U or \L, and ending with \E). I played around with this but couldn't get it to work. Perhaps it is, as you have pointed out, that the regexp is set to ignore case.
Really, we have to choose between changing case versus free-form search and replace? We want both! Changing case is often required in renaming files; it's too valuable a feature to give up. As for finding FILE1.txt and file2.txt in searches, it shouldn't be too hard for anyone using RegEx to define both lowercase and uppercase characters in their search terms.
Re: RegEx Rename fail in 4.3
ok I will change the regexp to case sensitive mode for the next build
-
- Silver Member
- Posts: 244
- Joined: 2004 Jun 16, 15:09
Re: RegEx Rename fail in 4.3
Thank you, sir! I look forward to it
-
- Silver Member
- Posts: 244
- Joined: 2004 Jun 16, 15:09
Re: RegEx Rename fail in 4.3
Thanks, version 4.3.0.1 fixes some of the regexp problems.
filename = camelCaseToSnakeCase.txt
regexp = (.+?)([A-Z])
replace with = $1_$2
expected result = camel_Case_To_Snake_Case.txt
result = camel_Case_To_Snake_Case.txt
Hurrah, no more "c_am_el_Ca_se_To_Sn_ak_eC_as_e.txt"!
Unfortunately case conversion is still a problem.
filename = camelCaseToSnakeCase.txt
regexp = (.+?)([A-Z])
replace with = $1_\L$2\E
expected result = camel_case_to_snake_case.txt
result = camel__LC_Ease__LT_Eo__LS_Enake__LC_Ease.txt
I'm following the instructions here: <http://www.regexlab.com/en/deelx/syntax/bas_esc.htm>
Same problem with uppercase:
filename = snake_case_to_camel_case.txt
regexp = (.*?)_([a-zA-Z])
replace with = $1\U$2\E
expected result = snakeCaseToCamelCase.txt
result = snake_Uc_Ease_Ut_Eo_Uc_Eamel_Uc_Ease.txt
The \U and \L tokens work fine elsewhere, I can only speculate that it's some peculiarity of the Deelx engine that they don't work here. Perhaps there is some arcane syntax usage I am missing? Sad, as capitalization/decapitalization is a handy feature in a renamer.
Off topic: The new way of calculating folder sizes with Ctrl+D is a great improvement!
filename = camelCaseToSnakeCase.txt
regexp = (.+?)([A-Z])
replace with = $1_$2
expected result = camel_Case_To_Snake_Case.txt
result = camel_Case_To_Snake_Case.txt
Hurrah, no more "c_am_el_Ca_se_To_Sn_ak_eC_as_e.txt"!
Unfortunately case conversion is still a problem.
filename = camelCaseToSnakeCase.txt
regexp = (.+?)([A-Z])
replace with = $1_\L$2\E
expected result = camel_case_to_snake_case.txt
result = camel__LC_Ease__LT_Eo__LS_Enake__LC_Ease.txt
I'm following the instructions here: <http://www.regexlab.com/en/deelx/syntax/bas_esc.htm>
You can see that the correct characters for conversion are being selected, they're just not being converted. Not sure why there's an extra underscore before the "L".If begins with \L, ends with \E, it will quote (disable) pattern metacharacters from \L till \E, and all uppercase alphas between them will be turned into lowercase."
Same problem with uppercase:
filename = snake_case_to_camel_case.txt
regexp = (.*?)_([a-zA-Z])
replace with = $1\U$2\E
expected result = snakeCaseToCamelCase.txt
result = snake_Uc_Ease_Ut_Eo_Uc_Eamel_Uc_Ease.txt
The \U and \L tokens work fine elsewhere, I can only speculate that it's some peculiarity of the Deelx engine that they don't work here. Perhaps there is some arcane syntax usage I am missing? Sad, as capitalization/decapitalization is a handy feature in a renamer.
Off topic: The new way of calculating folder sizes with Ctrl+D is a great improvement!
Re: RegEx Rename fail in 4.3
can you try your regexp in this tool and see what it's supposed to do?
http://www.regexlab.com/mtracer/
http://www.regexlab.com/mtracer/
-
- Silver Member
- Posts: 244
- Joined: 2004 Jun 16, 15:09
Re: RegEx Rename fail in 4.3
I get the same results in MTracer as I do in x2's Mass Renamer. MTracer shows that the regexp is correctly parsing the string, it's just the the \L, \U, \Q and \E tokens seem to have no effect as regards case conversion. Again, I can only speculate this is some peculiarity of the Deelx engine.nikos wrote: ↑2019 Nov 25, 18:42 can you try your regexp in this tool and see what it's supposed to do?
http://www.regexlab.com/mtracer/