Python如何移除字符串指定字符单个实例并截取目标子串
问题梳理
现有字符串列表:
"apple.test.banana", "test.example","example.example.test"
处理规则:
- 检查字符串里的点号数量,只处理刚好包含2个点的字符串
- 处理后返回去掉第一个点号前面的内容、剩下部分拼接的结果,预期输出是
test.banana和example.test
你写的代码有两个问题:
- 点号判断条件写的是
dot_count>1,没有精准匹配2个点的场景,点号数量大于2的字符串也会被误处理 split(".")[1]只取了拆分后的第二个分段,没把第二个点后面的内容带上,所以只能返回test,拿不到带点的完整后半段。
实现方案
方案1:沿用你原有计数逻辑的修正版
不用手动写循环数点号,直接用字符串自带的count方法统计就行,拆分后用切片取后半段再拼起来:
def get_target_substr(s): # 精准匹配刚好2个点的字符串 if s.count(".") == 2: parts = s.split(".") # 取第二个分段到最后一段的内容,用点重新拼接 return ".".join(parts[1:]) return None # 批量处理整个列表 str_list = ["apple.test.banana", "test.example", "example.example.test"] res = [item for item in map(get_target_substr, str_list) if item is not None] print(res) # 运行输出:['test.banana', 'example.test']
方案2:更简洁的写法
不需要单独数点号,拆分后看段数就行:如果按点拆分后刚好得到3段,就说明原字符串正好有2个点,直接拼接后两段即可。
str_list = ["apple.test.banana", "test.example", "example.example.test"] res = [] for s in str_list: parts = s.split(".") if len(parts) == 3: res.append(".".join(parts[1:])) print(res)
内容的提问来源于stack exchange,提问作者Astro_Scientist97
相关产品推荐
相关产品推荐

