Taking this simple sample SQL:
WITH my_data as
(SELECT 'XX_abc_123' label from DUAL UNION ALL
SELECT 'XX_SWU_541324_FFF' from DUAL)
SELECT label from MY_DATA;
Is there a way to write a Regular Expression in Notepad to make all text lower case, but to not change the case of any text between the '' marks, resulting in this:
with my_data as
(select 'XX_abc_123' label from dual union all
select 'XX_SWU_541324_FFF' from dual)
select label from my_data;
I have tried this:
- Find:
([a-z])
- Replace:
\L$1\E
But that makes everything lowercase:
with my_data as
(select 'xx_abc_123' label from dual union all
select 'xx_swu_541324_fff' from dual)
select label from my_data;
CodePudding user response:
You can use
Find What: '[^']*'|([A-Z])
Replace With: (?1\L$1:$0)
Make sure you select Regular expression and Match Case.
Details:
'[^']*'
- matches'
, zero or more chars other than'
and then a'
|
- or([A-Z])
- capture into Group 1 an ASCII uppercase letter.
The (?1\L$1:$0)
means that the replacement is a lowercased Group 1 value if Group 1 matched, else, the replacement is the whole match.
See the demo screenshot:
CodePudding user response:
In Notepad you might use SKIP FAIL to skip the matches for the single quote parts, and get matches for uppercase chars only.
'[^']*'(*SKIP)(*F)|[A-Z]
'[^']*'
Match from'....'
(*SKIP)(*F)
SKIP the match|
Or[A-Z]
Match a single uppercase char A-Z
In the replacement use the match $0
\L$0\E