>        :echo substitute(string, '\.\zs\A\|\a\zs\l', '', 'g')

Thanks Tony.  I ended up modifying it a bit -- I put the + quantifier
after the \l, and I removed the \. because it was keeping the _ and .
chars in the
result.

Here's my tweaks to your suggestion:

let string="FruitCompanyController_foo_bar_quk.groovy"
echo substitute(string, '\a\zs\l\+\|\zs\A', '', 'g')
>>FCCfbqg

Thanks again!

--Nate

On Tue, Jun 30, 2009 at 3:56 AM, Tony
Mechelynck<[email protected]> wrote:
>
> On 30/06/09 09:50, Nathan Neff wrote:
>>
>> Hello,
>>
>> I'd like to be able to use Vim to get characters from a string that
>> fit the following criteria
>>
>> 1) Is the first character in the string
>> OR
>> 2) Is an upper-case character
>> OR
>> 3) Is the first character in a "word", meaning the "b" in "foo_bar" or
>> the "g" in "foo.groovy"
>>
>> I have a Perl script which gets close:
>>
>> #!/usr/bin/perl
>> $string = 'fooBarBazQuk_hello.world';
>> @matches = $string =~ /(^\w|[A-Z]|_\w|\W\w)/g;
>> print "Matches are: " . join ":", @matches;
>>
>> With the Perl script, I can just weed out characters like "_" and "."
>> after I get my list of matches.
>>
>> I've tried using Vim's matchstr and the matchlist functions, but can't
>> quite get the regex
>> correct.
>>
>> Can anyone help?
>>
>> Thanks
>> --Nate
>
> The following is untested. SINGLE quotes are important.
>
>        :echo substitute(string, '\.\zs\A\|\a\zs\l', '', 'g')
>
> If I didn't goof, this should display the string after removing from it
> all nonalpha characters except at the very start and all lowercase
> characters immediately preceded by a letter. If the string is
> 'fooBarBazQuk_hello.world' as in your example, it ought to display
>
>        fBBQhw
>
> See
>        :help substitute()
>
> Remove the initial \.\zs in the pattern if you want to remove nonalpha
> characters even at the start.
>
>
> If you want to use this repeatedly on various strings, you can of course
> define it as a function:
>
>        function CamelCaseInitials(string)
>                return substitute(a:string, '\.\zs\A\|\a\zs\l', '', 'g')
>        endfunction
>
>
> Best regards,
> Tony.
> --
> Q:  Where can you buy black lace crotchless panties for sheep?
> A:  Fredrick's of Ithaca, New York.
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_use" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

Reply via email to