Istvan Istvan - 1 year ago 59
Python Question

Removing element from a list by a regexp in Python

I am trying to remove a string that is in parentheses from a list in Python without success.

See following code:

full = ['webb', 'ellis', '(sportswear)']
regex = re.compile(r'\b\(.*\)\b')
filtered = [i for i in full if not]


['webb', 'ellis', '(sportswear)']

Could somebody point out my mistake?

Answer Source

The \b word boundary makes it impossible to match ( at the beginning of a string since there is no word there (i.e. \b requires a letter, digit or underscore to be right before ( in your pattern, and that is not the case).

As you confirm you need to match values that are fully enclosed with (...), you need regex = re.compile(r'\(.*\)$') with re.match.


import re
full = ['webb', 'ellis', '(sportswear)']
regex = re.compile(r'\(.*\)$')
filtered = [i for i in full if not regex.match(i)]

See the IDEONE demo

The re.match will anchor the match at the start of the string, and the $ will anchor the match at the end of the string.

Note that if your string has newlines in it, use flags=re.DOTALL when compiling the regex (so that . could also match newline symbols, too).