Python拆分而不删除分隔符

时间:2017-12-28 11:31:11

标签: python split

我知道这个问题可能会被标记为重复,但我已经阅读了其他内容并且他们没有帮助我。

我的文件看起来像这样。我想删除之前的每个字符 <?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.

10 个答案:

答案 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)

请参阅以下某些方式:

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'

2。获取索引打印剩余内容

In [8]: text[text.index(sep):]
Out[8]: '<?xml version="1.0" encoding="UTF-8"?><soapenv:Env etc. etc.\n'

3。使用正则表达式

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])]