url = 'abcdc.com'
print(url.strip('.com'))
我预期的是:
abcdc
我得到的是:abcd
现在我要做的是url.rsplit('.com', 1)
有更好的方法吗?
请参阅如何在Python中使用.strip/.rstrip/.lstrip字符串方法?以获得有关第一次尝试的具体解释。
url = 'abcdc.com'
print(url.strip('.com'))
abcdc
我得到的是:abcd
现在我要做的是url.rsplit('.com', 1)
有更好的方法吗?
strip
并不意味着“删除此子字符串”。x.strip(y)
将y
视为一组字符,并从x
的两端剥离该集合中的任何字符。
在Python 3.9及更高版本中,您可以使用removeprefix
和removesuffix
方法从字符串的任一侧删除整个子字符串:
url = 'abcdc.com'
url.removesuffix('.com') # Returns 'abcdc'
url.removeprefix('abcdc.') # Returns 'com'
相关的Python增强提案是PEP-616。
在Python 3.8及更早版本中,您可以使用endswith
和切片:
url = 'abcdc.com'
if url.endswith('.com'):
url = url[:-4]
或使用 正则表达式:
import re
url = 'abcdc.com'
url = re.sub('\.com$', '', url)
url = url[:-4] if any(url.endswith(x) for x in ('.com','.net')) else url
这行代码的意思是,如果URL以'.com'或'.net'结尾,则去掉URL中的最后四个字符,否则不做任何更改。 - Burhan KhalidEXAMLPLE.COM
,域名不区分大小写。(这是正则表达式解决方案的投票) - Jasenrsplit()
的解决方案在原始字符串中间没有子字符串时,与 endswith()
的行为不同。例如:"www.comeandsee.com".rsplit(".com",1)[0] == "www.comeandsee",但是 "www.comeandsee.net".rsplit(".com",1)[0] == "www"。 - Steefs[:-n]
的语法有一个注意点:当n = 0
时,它不会返回将字符串末尾的零个字符去掉后的字符串,而是返回空字符串。 - BlenderBender如果你确定该字符串仅出现在末尾,则最简单的方法是使用 'replace':
url = 'abcdc.com'
print(url.replace('.com',''))
www.computerhope.com
这样的网址。使用 endswith()
进行检查,应该就可以了。 - ghostdog74"www.computerhope.com".endswith(".com")
为真,但它仍然会出错! - user1974640def strip_end(text, suffix):
if suffix and text.endswith(suffix):
return text[:-len(suffix)]
return text
len(text)-len(suffix)
的原因不清楚(实际上,您在编辑中修复了该错误,并且曾经有一个错误的评论在此处告诉您不需要len(text)
,因此这似乎容易出错),而if suffix
则清楚地说明了您实际检查的内容及其原因。 - user3064538因为似乎还没有人指出这一点:
url = "www.example.com"
new_url = url[:url.rfind(".")]
使用这种方法比使用split()
更高效,因为它不会创建新的列表对象,并且此解决方案适用于具有多个点的字符串。
取决于您了解URL的情况以及您要做什么。 如果您知道它将始终以“.com”(或“.net”或“.org”)结尾,则
url=url[:-4]
如果只是想快速解决问题,那么这可能是最快的方法。如果涉及到更一般的URL,则最好研究Python附带的urlparse库。
另一方面,如果你只想从字符串中删除最后一个点号(.)以及之后的所有内容,那么……
url.rsplit('.',1)[0]
这将有效。或者如果你只想要第一个“.”之前的所有内容,可以尝试
url.split('.',1)[0]
如果你知道它是一个扩展程序,那么
url = 'abcdc.com'
...
url.rsplit('.', 1)[0] # split at '.', starting from the right, maximum 1 split
这同样适用于 abcdc.com
或 www.abcdc.com
或 abcdc.[任何内容]
,而且更具扩展性。
在 Python 3.9+ 版本中:
text.removesuffix(suffix)
在任何 Python 版本中:
def remove_suffix(text, suffix):
return text[:-len(suffix)] if text.endswith(suffix) and len(suffix) != 0 else text
或者使用一行代码:
remove_suffix = lambda text, suffix: text[:-len(suffix)] if text.endswith(suffix) and len(suffix) != 0 else text
text[:-len(suffix)] if suffix and text.endswith(suffix) else text
- user3064538那么 url[:-4]
怎么样?
.ca
或者 .co.uk
的网址,几乎肯定会导致 bug。 - Peter声明:这种方法存在一个重大缺陷,即分区未锚定到URL的结尾,可能返回虚假结果。例如,URL“www.comcast.net”的结果为“www”(错误),而不是预期的“www.comcast.net”。因此,这个解决方案是有害的。除非您知道自己在做什么,否则不要使用它!
url.rpartition('.com')[0]
这很容易打出来,当url
缺少后缀“.com”时,它也会正确地返回原始字符串(无错误)。
www.comcast.net
,它将错误地返回 www
。 - user3064538