テキストの「内部」単語境界でCamelCase単語を分割する方法はありますか?
たとえば、次の文字列が与えられます:
IamHelloTest forYou PickTest;
入力として、出力として生成したい:
Iam
Hello
Test
for
You
Pick
Test
更新: 質問に役立つ回答がたくさんあるので、次のケースも含めるにはどうすればよいですか?
入力:
IamTestECHO TEST PickFoo BARFull;
必要な出力:
I
am
Test
ECHO
TEST
Pick
Foo
Bar
FULL
更新: アンダースコアも含めるにはどうすればよいですか?
入力:
IamTestECHO TEST PickFoo BARFull def_python_FunctionTwo;
必要な出力:
I
am
Test
ECHO
TEST
Pick
Foo
Bar
FULL
def
python
Function
Two
承認された回答:
2番目の例に対処するために、より「ルールベース」のアプローチを提案します。
次のPerlスクリプト(camelcaseproc
を検討してください。 ):
#!/usr/bin/perl -CSDA -p
s{ \W+ # break on non-word
| _ # break on "_"
| (?<=\p{Ll})(?=\p{Lu}) # ...aB... → ...a-B...
| (?<=\p{Lu})(?=\p{Lu}\p{Ll}) # ..ABCd.. → ...AB-Cd.
| (?<=I)(?=am) # exceptions rules
}{-}xg #
- 1行目:Unicodeを使用する(アクセントを処理するため、キリル文字)
- 2行目:非文字を「\n」に置き換えます
- 3,4,5行目:ブレークイントラワードルール(左側のコンテキスト、右側のコンテキストで定義)
- 5行目:「Iam」の例外ルール
- 5行目:
x
オプションを使用すると、正規表現にコメントを追加できます
通常のchmod +x camelcaseproc
の後 次のように使用できます:
$ camelcaseproc <<< "IamTestECHO TEST PickFoo BARFull"
I-am-Test-ECHO-TEST-Pick-Foo-BAR-Full
$ camelcaseproc input-file
$ echo "IamTestECHO TEST PickFoo BARFull" | camelcaseproc