有没有办法在文本中的“内部”单词边界处拆分 CamelCase 单词?
例如,给定字符串:
IamHelloTest forYou PickTest;
Run Code Online (Sandbox Code Playgroud)
作为输入,我想产生作为输出:
Iam
Hello
Test
for
You
Pick
Test
Run Code Online (Sandbox Code Playgroud)
更新:既然问题有很多有用的答案,我将如何继续包括以下案例?
输入:
IamTestECHO TEST PickFoo BARFull;
Run Code Online (Sandbox Code Playgroud)
期望的输出:
I
am
Test
ECHO
TEST
Pick
Foo
Bar
FULL
Run Code Online (Sandbox Code Playgroud)
更新:我将如何继续包含下划线?
输入:
IamTestECHO TEST PickFoo BARFull def_python_FunctionTwo;
Run Code Online (Sandbox Code Playgroud)
期望的输出:
I
am
Test
ECHO
TEST
Pick
Foo
Bar
FULL
def
python
Function
Two
Run Code Online (Sandbox Code Playgroud)
如果您的grep
实现支持-o
(并且不是与-o
空字符串匹配的正则表达式窒息的 ast-open 实现):
grep -o '[[:upper:]]*[[:lower:]]*'
Run Code Online (Sandbox Code Playgroud)
为了处理您的第二个示例,建议采用更“基于规则”的方法。\n考虑以下 Perl 脚本 ( camelcaseproc
):
#!/usr/bin/perl -CSDA -p\n\ns{ \\W+ # break on non-word\n | _ # break on "_"\n | (?<=\\p{Ll})(?=\\p{Lu}) # ...aB... \xe2\x86\x92 ...a-B...\n | (?<=\\p{Lu})(?=\\p{Lu}\\p{Ll}) # ..ABCd.. \xe2\x86\x92 ...AB-Cd.\n | (?<=I)(?=am) # exceptions rules\n }{-}xg # \n
Run Code Online (Sandbox Code Playgroud)\n\nx
选项可以在正则表达式中添加注释通常chmod +x camelcaseproc
我们可以将其用作:
$ camelcaseproc <<< "IamTestECHO TEST PickFoo BARFull"\nI-am-Test-ECHO-TEST-Pick-Foo-BAR-Full\n\n$ camelcaseproc input-file\n\n$ echo "IamTestECHO TEST PickFoo BARFull" | camelcaseproc\n
Run Code Online (Sandbox Code Playgroud)\n