如何在Python中删除特定字符之前的所有字符?

如何在Python中删除特定字符之前的所有字符?,python,string,replace,Python,String,Replace,我想删除指定字符或字符集之前的所有字符(例如): intro=“我是汤姆。” 现在我想删除之前的(或者更具体地说,I)。有什么建议吗?使用re.sub。只需将所有字符匹配到I,然后将匹配的字符替换为I re.sub(r'^.*?I', 'I', stri) 由于index(char)获取字符的第一个索引,因此只需执行string[index(char):] 例如,在本例中,index(“I”)=2,以及intro[2:][2:]=“我是汤姆。”str=“我是汤姆。” 温度=str.split

我想删除指定字符或字符集之前的所有字符(例如):

intro=“我是汤姆。”

现在我想删除
之前的
(或者更具体地说,
I
)。有什么建议吗?

使用
re.sub
。只需将所有字符匹配到
I
,然后将匹配的字符替换为
I

re.sub(r'^.*?I', 'I', stri)
由于
index(char)
获取字符的第一个索引,因此只需执行
string[index(char):]

例如,在本例中,
index(“I”)=2
,以及
intro[2:][2:]=“我是汤姆。”

str=“我是汤姆。”
温度=str.split(“I”,1)
临时[0]=临时[0]。替换(“,”)
str=“I”。加入(临时)

如果您知道开始删除的字符位置,可以使用切片表示法:

intro = intro[2:]
如果您知道要删除的字符,而不知道从何处开始,则可以使用以下功能:

intro = intro.lstrip("<>")
intro=intro.lstrip(“”)
重新导入
简介=“我是汤姆。”
re.sub(r'I',I',简介)

str.find
可以找到
某些字符串第一次出现时的字符索引

intro[intro.find('I'):]

我循环遍历字符串并传递索引

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)
intro_list=[]
简介=“我是汤姆。”
对于范围内的i(len(intro)):
如果介绍[i]='':
通过
其他:
简介列表。附加(简介[i])
简介=''.join(简介列表)
印刷品(简介)
intro=“这些是不需要的字符,我是汤姆”
indx=介绍。查找(“I”)#“I”的位置
intro=intro[indx:]
印刷品(简介)
>intro=“我是汤姆。”
#只需在特殊符号处拆分字符串
>>>简介拆分(“”)
输出=[''“我是汤姆。”]
>>>新建=简介拆分(“”)
>>>新增[1]
“我是汤姆。”


指定的字符是什么?@SimeonVisser在这种情况下,它是
I
。我明白了,但在其他情况下?我们如何知道文本从何处开始?嗯,我正在过滤文本中我要查找的内容;因此,作为回应,您可以通过使用循环、拆分文本/单词等来知道它从何处开始。我对
re
相当陌生,我将进一步研究它;我很感激你的回答,谢谢!注意,您可以在第一个或最后一个
I
re.sub(r.*?I',I',stri)
之间切换。但是其他答案不能满足这个要求。所以你是说
re
是最好的选择?你有什么好的教程/文章来解释
re
的基本原理吗?谢谢你的帮助。选择答案完全取决于你自己。是的,每个开发人员都必须学习正则表达式,因为很少有语言不使用正则表达式。@Avinashraja你知道我如何在不知道长度或字符的情况下做到这一点吗?没问题。这也适用于任何字符串。请注意1)您可能必须确保索引有效,即不是-1和2)
index
仅返回给定字符串的第一次出现。实际示例为:
intro[intro.index('i'):]
如果字符未出现在字符串中,这将引发一个
ValueError
。不是downvoter,但您可以使用此
'I'+intro.split('I',1)[1]
@AvinashRaj我也不是,尽管这会如何(真正好奇)改变函数的形状?据我所知,您在
I
之前拆分了所有内容?另外,
[1]
代表什么?拆分列表的索引1如果字符串中缺少字符,这将只返回输入字符串的最后一个字符,因为
.find
将返回
-1
,而
某些字符串[-1:]
是“返回从最后一个字符开始的所有字符”。不会删除指定字符(OP)之前的所有内容,例如,使用
intro=“junkI'm Tom.”
,将生成
“junkI'm Tom.”
import re
intro = "<>I'm Tom."
re.sub(r'<>I', 'I', intro)
intro[intro.find('I'):]
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)
intro="These are unwanted characters <> I'm Tom"
indx = intro.find("I")#position of 'I'
intro = intro[indx:]
print(intro)
import re

date_div = "Blah blah\nblah, 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())