How to strip certain characters from a string in python

Viewed 78

I am trying to strip certain characters from a string. The string I have is -

test_list = ['INFO:      196ns ### Starting ABC Test ###\n', 'INFO:     310ns ### Starting write_def_test ###\n', 'INFO:     752ns ### Starting write_55s_test ###\n', 'INFO:    152ns ### Starting rands_test ###\n', 'INFO:    237ns ### Starting dog_wffs_test ###\n']

The code I have is -

test_list_1 = []
for i in test_list:
    m = i.strip("INFO:      ")
    m = m.strip("###")
    test_list_1.append(m)
print(test_list_1)

The output I am looking for is -

['ABC Test', 'write_def_test', 'write_55s_test', 'rands_test', 'dog_wffs_test']

How can I get it?

3 Answers

Here's one using regex:

import re

test_list = ['INFO:      196ns ### Starting ABC Test ###\n', 'INFO:     310ns ### Starting write_def_test ###\n', 'INFO:     752ns ### Starting write_55s_test ###\n', 'INFO:    152ns ### Starting rands_test ###\n', 'INFO:    237ns ### Starting dog_wffs_test ###\n']

p = re.compile(r"### Starting (.*?) ###")
output = [next(p.finditer(x)).group(1) for x in test_list]
# or, output = [p.findall(x)[0] for x in test_list]

print(output)
# ['ABC Test', 'write_def_test', 'write_55s_test', 'rands_test', 'dog_wffs_test

This approach is to get the "core" part, rather than stripping out peripheral parts.

You're better off using regex here, i.e.:

import re

out = re.findall('Starting ([^#]+)', '|'.join(test_list))

I agree regex is probably the way to go for complex pattern matching, if you cant use that or don't want to learn it for whatever reason, the string.find() method is very useful for simple cases like this/one offs where cooking up regex may take a little too much time:

test_list_1 = []
for i in test_list:
    test_list_1.append(i[i.find('### ') + 13 : i.find('###\n') - 1])
print(test_list_1)
Related