Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: How to split CamelCase?

by Sidhekin (Priest)
on Sep 18, 2007 at 10:02 UTC ( #639600=note: print w/ replies, xml ) Need Help??


in reply to How to split CamelCase?

First, since there is no seperator, I would not first look to split, but rather to m//g in list context:

my $string = "ThisIsACamelCasedString"; my @split = $string =~ /([A-Z][a-z]*)/g; print "Parts: @split";

(This version just skips any part that does not match /[A-Z][a-z]*/; season to taste.)

Dealing with "AStringWithFTP" is trickier, at least without a dictionary. The only heuristic I may suggest is to treat sequences of upper-case characters as a word of its own if in final position or if preceding an uppercase-lowercase sequence:

my $string = "AStringWithFTPAndHTTP"; my @split = $string =~ /([A-Z](?:[A-Z]*(?=$|[A-Z][a-z])|[a-z]*))/g; print "Parts: @split";

That this is a heuristic is clear from noting that "ACString" is split as "AC", "String", and not as "A", "C", "String". But frankly, without a dictionary, I don't think there is a real solution.

Update: Oops, pasted the wrong code. Fixed now. Also added prints to make it easier to test that it really is the code I meant to post ...

Update2: Err, pasted the wrong right code too. Sorry, salva, I did not mean to steal it. /me *blushes* (Fixed now.)

print "Just another Perl ${\(trickster and hacker)},"
The Sidhekin proves Sidhe did it!


Comment on Re: How to split CamelCase?
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://639600]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (8)
As of 2015-07-08 02:59 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (93 votes), past polls