ChatGPT解决这个技术问题 Extra ChatGPT

How to remove all characters after a specific character in python?

I have a string. How do I remove all text after a certain character? (In this case ...)
The text after will ... change so I that's why I want to remove all characters after a certain one.


w
wjandrea

Split on your separator at most once, and take the first piece:

sep = '...'
stripped = text.split(sep, 1)[0]

You didn't say what should happen if the separator isn't present. Both this and Alex's solution will return the entire string in that case.


Request is "remove all the text after" the separator, not "get" that text, so I think you want [0], not [-1], in your otherwise excellent solution.
Worked perfectly thanks, as I'm sure Ayman & Alex's did as well, so thank you all.
Use rsplit() if you need to split by a character starting from the end of the string.
rsplit() actually answers the question if there are multiple occurrences of the separator
w
wjandrea

Assuming your separator is '...', but it can be any string.

text = 'some string... this part will be removed.'
head, sep, tail = text.partition('...')

>>> print head
some string

If the separator is not found, head will contain all of the original string.

The partition function was added in Python 2.5.

S.partition(sep) -> (head, sep, tail) Searches for the separator sep in S, and returns the part before it, the separator itself, and the part after it. If the separator is not found, returns S and two empty strings.


Yet another excellent solution -- are we violating TOOOWTDI?-) Maybe worth a timeit run to check...
.partition wins -- 0.756 usec per loop, vs 1.13 for .split (comment formatting doesn't really let me show the exact tests, but I'm using @Ayman's text and separator) -- so, +1 for @Ayman's answer!
and btw, for completeness, the RE-based solution is 2.54 usec, i.e., way slower than either @Ayman's or @Ned's.
partition wins if you're in 2.5 land :) For us suckers stuck in 2.4, we have to live with relatively glacial slowness of split.
Example is really helpful.
t
theannouncer

If you want to remove everything after the last occurrence of separator in a string I find this works well:

<separator>.join(string_to_split.split(<separator>)[:-1])

For example, if string_to_split is a path like root/location/child/too_far.exe and you only want the folder path, you can split by "/".join(string_to_split.split("/")[:-1]) and you'll get root/location/child


additionally, you can change that -1 to any index to be the occurrence at which you drop text.
w
wjandrea

Without a regular expression (which I assume is what you want):

def remafterellipsis(text):
  where_ellipsis = text.find('...')
  if where_ellipsis == -1:
    return text
  return text[:where_ellipsis + 3]

or, with a regular expression:

import re

def remwithre(text, there=re.compile(re.escape('...')+'.*')):
  return there.sub('', text)

Might want to use sep='...' as a kwarg and use len(sep) instead of hard-coding the 3 to make it slightly more future-proof.
Yep, but then you need to recompile the RE on each call, so performance suffers for the RE solution (no real difference for the non-RE solution). Some generality is free, some isn't...;-)
@Alex - Thanks for testing the solutions!
M
Marcus
import re
test = "This is a test...we should not be able to see this"
res = re.sub(r'\.\.\..*',"",test)
print(res)

Output: "This is a test"


kindly please explain
g
gujaratiraja

From a file:

import re
sep = '...'

with open("requirements.txt") as file_in:
    lines = []
    for line in file_in:
        res = line.split(sep, 1)[0]
        print(res)

E
Eduardo Freitas

The method find will return the character position in a string. Then, if you want remove every thing from the character, do this:

mystring = "123⋯567"
mystring[ 0 : mystring.index("⋯")]

>> '123'

If you want to keep the character, add 1 to the character position.


G
Ganesan J

This is in python 3.7 working to me In my case I need to remove after dot in my string variable fees

fees = 45.05 split_string = fees.split(".", 1)

substring = split_string[0]

print(substring)


A
Arnaldo C

Yet another way to remove all characters after the last occurrence of a character in a string (assume that you want to remove all characters after the final '/').

path = 'I/only/want/the/containing/directory/not/the/file.txt'

while path[-1] != '/':
    path = path[:-1]

I think this will create a new copy of path at each iteration, so it's not a particularly efficient solution, although I agree it should work.
B
Baris Demiray

another easy way using re will be

import re, clr

text = 'some string... this part will be removed.'

text= re.search(r'(\A.*)\.\.\..+',url,re.DOTALL|re.IGNORECASE).group(1)

// text = some string

Regular expressions are difficult because of the shorthand. This might be a useful answer, but you didn't explain any of it.