使用记事本++将under_score_case更改为CamelCase?


19

我可以用NP ++写一个正则表达式来查找under_score_case。我可以在NP ++中使用TextFX通过突出显示和选择来将大小写更改为大写和小写。

如何使用NP ++的“查找/替换”或TextFX的“查找和替换”将它们缝合在一起并转换under_score_casecamelCase

我想学习如何在NP ++中不使用脚本来执行此操作。

输入样例:

this is_a_line
some more_data_over_here
whoop de_do_da

所需的输出:

this isALine
some moreDataOverHere
whoop deDoDa

与下划线匹配的正则表达式为_([a-z])。我认为存在的替代品,但找不到_\toupper\1

Answers:


6

我有一个冗长而费力的解决方案,但是可以在Notepad ++中使用。它要求使用正则表达式,可选的常规搜索和替换以及TextFX。

  1. 我选择在每个单词的前面添加一个占位符Z。它可能不必一定要按字母顺序排列,但是对于最后一步来说则更容易。使用正则表达式搜索\<([^ ]*)\>并替换为Z\1
  2. 用唯一的占位符序列替换现有空间。我选择了#space#。可以使用正则表达式来完成,但是我更喜欢使用normal或expanded。
  3. 用空格替换下划线。如果有任何下划线不应该替换,则可能需要自定义正则表达式。我只是直接搜索并替换。
  4. 选择所有文本,然后从TextFX菜单中选择TextFX Characters -> Proper Case
  5. 现在我们需要颠倒前三个步骤。搜索空格,然后将其替换为空。然后搜索您的空间占位符序列,并替换为一个空格。最后,使用正则表达式搜索\<Z([^ ]*)\>并替换为\1

令人费解,但它可以工作。
Freiheit,

Notepad ++的正则表达式失败使我想出了类似的解决方案,特别是当我需要跨行查找和替换或使用特殊字符(如tab)时。
MBraedley

顺便说一句,NP ++的项目负责人(我记得何先生)是否对引入类似vim的替换支持产生了干扰?有插件支持吗?NP ++和TextFX确实功能强大,只需要多一点就可以将它们缝合在一起。
Freiheit,

我并不真正关注该项目,但我可以想象他受到Scintilla的使用的限制。
MBraedley

1
一个警告:如果每个单词中的第二个和后续字符都是大写字母,则将其ALL_CAPS变为小写,例如变为allCaps
Gnubie 2012年

15

一个简单的查找/替换将在NP ++中完成:

找: [_]{1,1}([a-z])

更换: \U$1

您需要在“替换”面板中选择“正则表达式”单选按钮,此功能才能起作用。


5
_(.)作为搜索字符串。
Dominic Comtois

如果需要PascalCase(一步式操作),则可以使用 查找: (?:^|_)([a-z]) 替换: \U$1$2
Rubenisme

6

我通常自己使用vim作为编辑器。以下正则表达式完成了您在vim中尝试执行的操作:

%s/_\([a-zA-Z]\)/\u\1/g

据我所知(我对NP ++\u有所了解),Notepad ++无法理解Perl Regexp中的大写宏。您可能无法完全使用Notepad ++做到这一点。希望有人会证明我做错了,让你过得愉快。


是的,我被困在Windows环境中。可以将数据复制到* nix或OS X机器上,但是很难实现。我还可以对其他队友进行NP ++交叉培训。
Freiheit

我认为相同的表达方式在eMac中也有效。我的eMac知识很模糊。。。
surfasb 2011年

@Freiheit Windows有vim;尽管这对其他队友对NP ++的交叉训练没有帮助
Matrix Mole

实际上,这在最新版本的Notepad ++中似乎可以正常工作(我使用的是6.7.7)。
黎凡特

3

您可以在notepad ++中一步完成此操作,这可能更有用:

Find: ([a-z]+)[_]?([a-z]?)([a-z]+)[_]?([a-z]?)([a-z]+)[_]?([a-z]?)([a-z]+)\.php
Replace: $1\U$2\L$3\U$4\L$5\U$6\L$7

唯一的问题是,您需要知道出现欠分的最长时间以及字符串的结尾方式。在上面的示例中,我将php文件名替换为camelCase,因为知道得分不足不能超过3次,少了没问题。


2

我个人最喜欢的是sed。快如闪电:

>回声make_me_camel_case_please | sed -e's /(__ az))/ \ U \ 1 / g'-e's / _ // g'

makeMeCamelCase请

您可以使用-i选项对正在编辑的文件执行替换,并且N ++应该接受更改。

与上面的某些解决方案一样,这也会删除所有下划线。如果这是一个问题可以解决。


2
  • 转换蛇案我可以按照以下步骤使用Notepad ++做到这一点。

  • 将蛇形输入转换为所有小写(如果尚未转换为小写)

  • 打开替换表单(搜索->替换Ctrl + H
  • 检查正则表达式单选按钮
  • 寻找_([a-z])_(.)
  • \u\1输入取代

0

我使用Notepad ++ 7.3。我遇到了同样的问题,并且执行了以下操作:

  1. Ctrl+ H(显示查找表格)
  2. 检查正则表达式单选按钮
  3. 寻找«_([az] +)»
  4. 替换为«\ u \ 1»

和工作!


因此,这会将所有字母更改为小写,然后大写下划线后面的字母,对吗?因此We use the bean_counter variable, which was Fred's idea将更改为we use the beanCounter variable, which was fred's idea(小写已经大写的字母)?这似乎并不令人满意。
斯科特,

谢谢,斯科特,我对这个想法不完全理解,所以我希望现在一切都好。
Francisco M

是的,那更好。您可能可以简化一下:只需查找«_([az])»(不带+)。不幸的是,这现在基本上等于先前的几个答案。
斯科特,

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.