Reputation: 357
I have a list on which I try to remove special chars using a loop. When I've tried to remove those special chars without a loop, it worked. But with a loop didn't work, but did run (and I don't know how). Those special chars are :"[" and "]". It's probably something very simple or with list's comprehension, which I tried some but didn't quite work ( How do you use a regex in a list comprehension in Python? )
Could you help? I'm new to Python, but it would help a lot. Please share your knowledge!
Output should be : [ '1', '2' ]
My code:
import re
# Case 1 : Sub with no loop
w = '[ 1,2,3,4 ]'
outer= re.compile("\[(.+)\]")
m = outer.search(w)
inner_str = m.group(1)
# Case 2 - Sub with loop
x = [ '[1]', '[2]' ]
for item in x:
if item == re.match('\[(.+)\]', item):
print(re.sub("\[(.+)\]", "", item))
Upvotes: 7
Views: 28167
Reputation: 70732
You can do this using a list comprehension, you mean something like this?
>>> import re
>>> x = [ '[1]', '[2]' ]
>>> [re.sub(r'\W', '', i) for i in x]
['1', '2']
The token \W
matches any non-word character.
Upvotes: 17
Reputation: 77367
Assuming you are trying to keep the stuff inside the brackets, this works:
import re
# Case 1 : no sub!
w = '[ 1,2,3,4 ]'
outer= re.compile("\[(.+)\]")
m = outer.search(w)
inner_str = m.group(1)
print(inner_str)
# Case 2 - no sub!
x = [ '[1]', '[2]' ]
y = []
for item in x:
match = outer.match(item)
if match:
y.append(match.group(1))
print(y)
Upvotes: 1