我知道这个问题可能会被标记为重复,但我已经阅读了其他内容并且他们没有帮助我。
我的文件看起来像这样。我想删除之前的每个字符
<?xml
示例文本。
21.12.2017 18:31 1 CI-99 1 403-26 <?xml version="1.0" encoding="UTF-8"?><soapenv:Env etc. etc.
我尝试用:
sep = "<?xml"
result = text.split(sep, 1)[-1]
但结果会削减我的分隔符。 结果文本。
version="1.0" encoding="UTF-8"?><soapenv:Env etc. etc.
有关如何避免这种情况的任何建议,以便最终结果如下所示。
<?xml version="1.0" encoding="UTF-8"?><soapenv:Env etc. etc.
答案 0 :(得分:2)
您实际上不需要使用split
。只需找到子字符串,然后使用结果索引到字符串:
s = "21.12.2017 18:31 1 CI-99 1 403-26 <?xml version=\"1.0\" encoding=\"UTF-8\"?><soapenv:Env ..."
r = s[s.index("<?xml"):]
答案 1 :(得分:1)
只需在拆分结果之前附加它,例如
text = '21.12.2017 18:31 1 CI-99 1 403-26 <?xml version="1.0" encoding="UTF-8"?><soapenv:Env etc. etc.'
sep = "<?xml"
result = sep + text.split(sep, 1)[-1]
print(result)
打印
<?xml version="1.0" encoding="UTF-8"?><soapenv:Env etc. etc.
答案 2 :(得分:1)
请参阅以下某些方式:
In [2]: text
Out[2]: '21.12.2017 18:31 1 CI-99 1 403-26 <?xml version="1.0" encoding="UTF-8"?><soapenv:Env etc. etc.\n'
In [3]: sep = "<?xml"
In [4]: result = sep + text.split(sep, 1)[-1]
In [5]: result
Out[5]: '<?xml version="1.0" encoding="UTF-8"?><soapenv:Env etc. etc.\n'
In [8]: text[text.index(sep):]
Out[8]: '<?xml version="1.0" encoding="UTF-8"?><soapenv:Env etc. etc.\n'
In [9]: import re
In [10]: re.sub(r'(.*)<?xml', r'<?xml', text)
Out[10]: '<?xml version="1.0" encoding="UTF-8"?><soapenv:Env etc. etc.\n'
答案 3 :(得分:0)
试试这个,
我们将使用我们常用的分隔符添加自定义唯一分隔符,然后在这种情况下使用此自定义分隔符$
进行拆分,保持原始分隔符不变。
text = '21.12.2017 18:31 1 CI-99 1 403-26 <?xml version="1.0" encoding="UTF-8"?><soapenv:Env etc. etc.'
result = text.replace("<?xml", "<?xml$").split('$')
答案 4 :(得分:0)
只需使用index
方法搜索文本中的sep:
sep = '<?xml'
result = text[text.index(sep):]
答案 5 :(得分:0)
除非有特殊要求拆分字符串并使用正则表达式,否则我会执行简单的字符串操作。找到?xml
开始的位置,并获取此位置左侧的字符:
str = "21.12.2017 18:31 1 CI-99 1 403-26 <?xml version=\"1.0\" encoding=\"UTF-8\"?><soapenv:Env etc. etc."
ind = str.index("?xml")
print(ind)
print(str[0:ind - 1])
45
21.12.2017 18:31 1 CI-99 1 403-26
答案 6 :(得分:0)
除非您出于某种原因使用split
,否则您可以找到index
<?xml
并从那里开始string
:
text = '21.12.2017 18:31 1 CI-99 1 403-26 <?xml version="1.0" encoding="UTF-8"?><soapenv:Env etc. etc.'
index = text.index('<?xml')
text = text[index:]
print(text)
答案 7 :(得分:0)
我可以想到在分割后保留<?xml
的两种方法:
手动将字符串添加到字符串的开头
sep = "<?xml"
result = sep + text.split(sep, 1)[-1]
或者更优雅的解决方案是找到<?xml
并在它之前切割字符串(假设你知道它实际上在那里)
sep = "<?xml"
index = text.find(sep)
result = text[index:]
答案 8 :(得分:0)
您可以使用str.find()找到'<?xml'
的开头,然后在此索引处对字符串进行切片:
>>> text = '21.12.2017 18:31 1 CI-99 1 403-26 <?xml version="1.0" encoding="UTF-8"?><soapenv:Env etc. etc.'
>>> text[text.find('<?xml'):]
'<?xml version="1.0" encoding="UTF-8"?><soapenv:Env etc. etc.'
答案 9 :(得分:0)
使用正则表达式的方法如下:
sep = "\<\?xml" #escape the special characters
pattern = re.compile(rf"({sep})+")
# I created a longer string to allow for multiple matches
text = text*3
raw_result = re.split(pattern, text)
# If your delimiter is the end of the match group, start index = 0
# If your delimiter is the start of the match group, start index = 1
start_index = 1
result = ["".join([x,y]) for x,y in zip(
raw_result[start_index::2], raw_result[start_index+1::2])]