a list/re problem
Steven D'Aprano
steven at REMOVE.THIS.cybersource.com.au
Mon Dec 28 20:50:18 EST 2009
On Mon, 28 Dec 2009 17:35:22 -0800, Aahz wrote:
> In article <mailman.1744.1260564589.2873.python-list at python.org>, Ed
> Keith <e_d_k at yahoo.com> wrote:
>>
>>I have a list call it 'l':
>>
>>l = ['asc', '*nbh*', 'jlsdjfdk', 'ikjh', '*jkjsdfjasd*', 'rewr']
>>
>>Notice that some of the items in the list start and end with an '*'. I
>>wish to construct a new list, call it 'n' which is all the members of l
>>that start and end with '*', with the '*'s removed.
>
> What kind of guarantee do you have that the asterisk will only exist on
> the first and last character, if at all?
Does it matter?
In any case, surely the simplest solution is to eschew regular
expressions and do it the easy way.
result = [s[1:-1] for s in l if s.startswith('*') and s.endswith('*')]
For a more general solution, I'd use a pair of helper functions:
def bracketed_by(s, prefix, suffix=None):
if suffix is None:
suffix = prefix
return s.startswith(prefix) and s.endswith(suffix)
def strip_brackets(s, prefix, suffix=None):
if suffix is None:
suffix = prefix
return s[len(prefix):-len(suffix)]
Note that I haven't tested these two helper functions. The second in
particular may not work correctly in some corner cases (e.g. passing the
empty string as suffix).
--
Steven
More information about the Python-list
mailing list