2017-05-03 44 views
3

我正在嘗試使用Notepad ++宏進行一些文本操作。我最後一步是將camelCase字符串轉換爲SNAKE_CASE。到目前爲止沒有運氣。我對正則表達式不是很熟悉,所以不能編寫我自己的解決方案。從camelCase到SNAKE_CASE的所有文本

實施例的文本文件輸入:

firstLine(874), 
secondLine(15), 
thirdLineOfText87(0x0001); 

希望的輸出:

FIRST_LINE(874), 
SECOND_LINE(15), 
THIRD_LINE_OF_TEXT_87(0x0001); 

正則表達式或任何插件是可接受的答案。

回答

2

我建議以下的正則表達式的方法:

查找內容:          (\b[a-z]+|\G(?!^))((?:[A-Z]|\d+)[a-z]*)
替換爲\U\1_\2
區分大小寫ON

這會將camelCase87LikeThis字轉爲CAMEL_CASE_87_LIKE_THIS。如果您需要添加支持以大寫字母開頭的單詞的駱駝,使用正則表達式如下修改:

(\G(?!^)|\b[a-zA-Z][a-z]*)([A-Z][a-z]*|\d+) 

regex demo(也是在記事本測試++)。請注意0​​在正則表達式中的位置,並添加了A-Z

詳細

  • (\b[a-z]+|\G(?!^)) - 第1組捕獲任何兩個備選方案:
    • \b[a-z]+ - 一個字開始(\b是這裏的初始字邊界),然後用1 +小寫ASCII字母
    • | - 或
    • \G(?!^) - 組2捕獲 - 先前的成功匹配
  • ((?:[A-Z]|\d+)[a-z]*)的結束位置:
    • (?:[A-Z]|\d+) - 一個大寫字母ASCII([A-Z])或(|)1+數字(\d+
    • [a-z]* - 0+小寫ASCII字母。

\U\1_\2替換模式接通所有的字符與\U爲大寫,並插入兩個組(插入有\1\2反向引用)之間的_

enter image description here

+0

應該如何'找到what'樣子,如果camelCases開始上字母,例如:FIRSTLINE(874)? – Dancia

+1

第一種方法錯過了除最後一個之外的所有'_',第二種方法從'ThirdLineOfText87(0x0001);' - >'THIRD_LINEOF_TEXT_87(0x0001);'錯過了第二個_ – Dancia

+1

您可以使用['(\ G(?!^) | \ b [a-zA-Z] [az] *)([AZ] [az] * | \ d +)'](https://regex101.com/r/uj9mGm/1),訣竅是把'\ G'分支作爲交替組中的第一個選項,並在該單詞的開頭添加對大寫字母的支持。 –

相關問題