如何从字符串的末尾删除子字符串(删除字符串的后缀)?

562

7
__strip__会将给定的字符从字符串两端去除,对于你的情况,它会去除"."、"c"、"o"和"m"。 - mthurlin
7
它还会从字符串前面删除那些字符。如果你只希望从结尾处删除,请使用 rstrip()。 - Andre Miller
61
是的,str.strip并不是你想象中的那样。str.strip会从字符串的开头和结尾删除指定的任何字符。因此,"acbacda".strip("ad")将给出'cbac';开头的a和结尾的da被删除了。谢谢。 - scvalex
6
另外,这样可以以 任何顺序 删除字符:"site.ocm" > "site"。 - Eric O. Lebigot
8
@scvalex,哇哦,刚刚意识到在使用这种方法很久后它是很危险的,因为代码通常仍能正常工作。 - Flash
显示剩余4条评论
25个回答

0

这是正则表达式的完美应用:

>>> import re
>>> re.match(r"(.*)\.com", "hello.com").group(1)
'hello'

7
你还需要加上一个 $ 符号,以确保匹配以 ".com" 结尾的主机名。 - Cristian Ciupitu

0
使用由Mozilla托管的公共后缀列表。它可以作为Python库tldextract获得。
import tldextract

url = 'abcdc.com'

# Extract the domain and TLD
extracted = tldextract.extract(url)
domain, tld = extracted.domain, extracted.suffix

if tld and tld != 'localhost':
    url_without_tld = domain
else:
    url_without_tld = url

print(url_without_tld)

-1

使用replace和count

这可能看起来有点像是一个黑客方法,但它确保了您在不使用startswith和if语句的情况下进行安全替换,使用replace的count参数可以限制替换为一次:

mystring = "www.comwww.com"

前缀:

print(mystring.replace("www.","",1))

后缀(将前缀倒过来).com 变成 moc.

print(mystring[::-1].replace("moc.","",1)[::-1])

为什么你要这样做... - Smuuf

-1

这里,我有一个最简单的代码。

url=url.split(".")[0]

1
我认为你的意思是 url = url.split(".")[:-1] - ingyhere

-3

我使用内置的rstrip函数来实现它,如下所示:

string = "test.com"
suffix = ".com"
newstring = string.rstrip(suffix)
print(newstring)
test

2
不好的想法。请尝试使用“test.ccom”。 - Shital Shah
但这不是问题的重点。只是要求从另一个字符串的末尾删除已知的子字符串。这正如预期的那样工作。 - Alex
3
请尝试使用mooc.com或maximo.com来验证您的解决方案。 - lorenzo
是的@lorenzo,我现在尝试了一下,但它不能正常工作,因为它会吞掉所有东西。所以虽然它对于这个例子可以工作,但它不够通用。我尝试使用split,它效果更好,但仍然不完全通用: In [13]: string = "testcom.cp.com" ...: suffix = ".com" ...: newstring = string.split(suffix) ...: print(newstring[0])
testcom.cp
- Alex
你的回答表明你和提问者对于 strip/rstrip/lstrip 的作用有着同样的误解。他们将传递给函数的字符串视为字符集合,而不是要删除的字面前缀/后缀。请阅读文档 - user3064538
这个问题已经尝试了这种方法并展示了确切的问题。 - Karl Knechtel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接