I’d like to remove all characters before a designated character or set of characters (for example):
intro = "<>I'm Tom."
Now I’d like to remove the <> before I'm (or more specifically, I). Any suggestions?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Use re.sub. Just match all the chars upto I then replace the matched chars with I.
re.sub(r'^.*?I', 'I', stri)
Method 2
str.find could find character index of certain string's first appearance:
intro[intro.find('I'):]
Method 3
Since index(char) gets you the first index of the character, you can simply do string[index(char):].
For example, in this case index("I") = 2, and intro[2:] = "I'm Tom."
Method 4
If you know the character position of where to start deleting, you can use slice notation:
intro = intro[2:]
Instead of knowing where to start, if you know the characters to remove then you could use the lstrip() function:
intro = intro.lstrip("<>")
Method 5
str = "<>I'm Tom."
temp = str.split("I",1)
temp[0]=temp[0].replace("<>","")
str = "I".join(temp)
Method 6
I looped through the string and passed the index.
intro_list = []
intro = "<>I'm Tom."
for i in range(len(intro)):
if intro[i] == '<' or intro[i] == '>':
pass
else:
intro_list.append(intro[i])
intro = ''.join(intro_list)
print(intro)
Method 7
>>> intro = "<>I'm Tom."
#Just split the string at the special symbol
>>> intro.split("<>")
Output = ['', "I'm Tom."]
>>> new = intro.split("<>")
>>> new[1]
"I'm Tom."
Method 8
import re
date_div = "Blah blahnblah, Updated: Aug. 23, 2012 Blah blah Updated: Feb. 13, 2019"
up_to_word = ":"
rx_to_first = r'^.*?{}'.format(re.escape(up_to_word))
rx_to_last = r'^.*{}'.format(re.escape(up_to_word))
# (Dot.) In the default mode, this matches any character except a newline.
# If the DOTALL flag has been specified, this matches any character including a newline.
print("Remove all up to the first occurrence of the word including it:")
print(re.sub(rx_to_first, '', date_div, flags=re.DOTALL).strip())
print("Remove all up to the last occurrence of the word including it:")
print(re.sub(rx_to_last, '', date_div, flags=re.DOTALL).strip())
Method 9
This solution works if the character is not in the string too, but uses if statements which can be slow.
if 'I' in intro:
print('I' + intro.split('I')[1])
else:
print(intro)
Method 10
You can use itertools.dropwhile to all the characters before seeing a character to stop at. Then, you can use ''.join() to turn the resulting iterable back into a string:
from itertools import dropwhile
''.join(dropwhile(lambda x: x not in stop, intro))
This outputs:
I'm Tom.
Method 11
Based on the @AvinashRaj answer, you can use re.sub to substituate a substring by a string or a character thanks to regex:
missing import re output_str = re.sub(r'^.*?I', 'I', input_str)
Method 12
import re intro = "<>I'm Tom." re.sub(r'<>I', 'I', intro)
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0