如果要显示在列表中,我想将字符串的一部分替换为空白。
例如:
列表
foo = ['.com', '.net', '.co', '.in']
将这些字符串转换为
google.com
google.co.in
google.net
google.com/gmail/
这些字符串
google
google
google
google/gmail/
到目前为止,我已经找到了解决方案。还有其他优化方法吗?
replace item in a string if it matches an item in the list
答案 0 :(得分:1)
类似于乔治·舒尔金的答案。
import re
suffixes = ['.com', '.co', '.in', '.net']
patterns = [re.compile(suffix) for suffix in suffixes]
def remove_suffixes(s: str) -> str:
for pattern in patterns:
s = pattern.sub("", s)
return s
# urls = ["google.com", ...
clean_urls = map(remove_suffixes, urls)
# or clean_urls = [remove_suffixes(url) for url in urls]
您可能要使用列表推导,因为在许多情况下它可能比map
快。
这样做的好处是还可以编译正则表达式,在循环中使用时可以提高性能。
或者,如果您决定使用functools.reduce
,
from functools import reduce
def remove_suffixes(s: str) -> str:
return reduce(lambda s, pattern: pattern.sub("", s), patterns, s)
答案 1 :(得分:0)
您需要将此任务分成两部分:
首先可以使用regexp完成(请参见下文)。第二个可以通过使用map
函数来完成。
替换子字符串的代码示例:
>>> import re
>>> re.sub(".com", "", "google.com/gmail/")
'google/gmail/'
使用map
函数的示例:
>>> map(lambda x: len(x), ["one", "two", "three"])
[3, 3, 5]
(它将数组元素替换为这些元素的长度)。
您可以将两者结合起来以获得想要的东西。
答案 2 :(得分:0)
使用George Shuklin的建议,这是我能想到的最简单的代码。
import re
domains = ['.com', '.net', '.co', '.in']
urls = ["google.com","google.co.in","google.net","google.com/gmail/"]
for i in range(len(urls)):
for domain in domains:
urls[i] = re.sub(domain,"",urls[i])
print(urls)
这将输出:
['google', 'google', 'google', 'google/gmail/']
答案 3 :(得分:0)
您可以使用re.sub
和str.join
:
import re
foo = ['.com', '.net', '.co', '.in']
urls = ["google.com","google.co.in","google.net","google.com/gmail/"]
final_result = [re.sub('|'.join(foo), '', i) for i in urls]
输出:
['google', 'google', 'google', 'google/gmail/']
答案 4 :(得分:0)
另一种替代方法是使用str.replace()
和str.find()
。
foo = ['.com', '.net', '.co', '.in']
domains = ["google.com", "google.co.in", "google.net", "google.com/gmail/"]
def remove_extensions(domain, extensions):
for ext in extensions:
if domain.find(ext) != -1:
domain = domain.replace(ext, "")
return domain
list(map(lambda x: remove_extensions(x, foo), domains))
此代码段按预期输出结果:
['google', 'google', 'google', 'google/gmail/']