Apakah ada cara untuk memisahkan kata CamelCase pada batas kata "internal" dalam teks?
Misalnya, diberikan string:
IamHelloTest forYou PickTest;
sebagai input, saya ingin menghasilkan sebagai output:
Iam
Hello
Test
for
You
Pick
Test
Pembaruan: sekarang pertanyaannya memiliki banyak jawaban yang membantu, bagaimana saya melanjutkan untuk memasukkan kasus-kasus berikut juga?
Masukan:
IamTestECHO TEST PickFoo BARFull;
Keluaran yang diinginkan:
I
am
Test
ECHO
TEST
Pick
Foo
Bar
FULL
Pembaruan: bagaimana saya melanjutkan untuk memasukkan garis bawah juga?
Masukan:
IamTestECHO TEST PickFoo BARFull def_python_FunctionTwo;
Keluaran yang diinginkan:
I
am
Test
ECHO
TEST
Pick
Foo
Bar
FULL
def
python
Function
Two
Jawaban yang Diterima:
Untuk menangani contoh kedua Anda, sarankan pendekatan yang lebih "berbasis aturan".
Pertimbangkan skrip Perl berikut (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 #
- Baris 1:gunakan Unicode (untuk memproses aksen, Sirilik)
- Baris 2:ganti bukan huruf dengan “\n”
- baris 3,4,5:aturan break-intraWord (didefinisikan oleh konteks kiri, konteks kanan)
- baris 5:aturan pengecualian untuk “Iam”
- baris 5:
x
opsi memungkinkan untuk menambahkan komentar dalam ekspresi reguler
Setelah chmod +x camelcaseproc
biasa kita dapat menggunakannya sebagai:
$ camelcaseproc <<< "IamTestECHO TEST PickFoo BARFull"
I-am-Test-ECHO-TEST-Pick-Foo-BAR-Full
$ camelcaseproc input-file
$ echo "IamTestECHO TEST PickFoo BARFull" | camelcaseproc