如何移除字符串中英文句号(.)之后的全部文本(含.jpg截断场景)
移除字符串中英文句号后全部内容的实现方案
核心实现逻辑为定位目标英文句号的位置,截取该位置之前的全部内容即可。针对文件名类场景,需根据需求选择对应的句号定位规则:
- 规则1:遇到第一个英文句号即截断后续所有内容
- 规则2:仅截断最后一个英文句号及之后的内容(适用于去除文件扩展名的常规文件名处理场景,可匹配输入
e 01_US_CAN_141.jpg输出e 01_US_CAN_141的需求)
不同技术栈的具体实现
Python
- 规则1(第一个句号截断)
s = "e 01_US_CAN_141.jpg" dot_index = s.find('.') # 无句号时直接返回原字符串 result = s[:dot_index] if dot_index != -1 else s
- 规则2(最后一个句号截断,适合文件名去后缀)
s = "e 01_US_CAN_141.jpg" dot_index = s.rfind('.') result = s[:dot_index] if dot_index != -1 else s
JavaScript(前端/Node.js场景)
- 规则1
const s = "e 01_US_CAN_141.jpg"; const dotIndex = s.indexOf('.'); const result = dotIndex !== -1 ? s.slice(0, dotIndex) : s;
- 规则2
const s = "e 01_US_CAN_141.jpg"; const dotIndex = s.lastIndexOf('.'); const result = dotIndex !== -1 ? s.slice(0, dotIndex) : s;
Java
- 规则1
String s = "e 01_US_CAN_141.jpg"; int dotIndex = s.indexOf('.'); String result = dotIndex != -1 ? s.substring(0, dotIndex) : s;
- 规则2
String s = "e 01_US_CAN_141.jpg"; int dotIndex = s.lastIndexOf('.'); String result = dotIndex != -1 ? s.substring(0, dotIndex) : s;
Shell(批量文件名处理场景)
使用Shell参数展开可快速实现,无需额外写逻辑:
- 规则1(截断第一个句号及后续):
${file%%.*} - 规则2(截断最后一个句号及后续,通用去扩展名):
${file%.*}
示例批量重命名:
# 遍历当前目录所有文件,去掉文件后缀重命名 for file in *; do # 跳过目录 if [ -f "$file" ]; then mv "$file" "${file%.*}" fi done
边界情况说明
- 字符串无英文句号:所有实现都默认返回原字符串,不会触发报错
- 句号出现在字符串开头:如
.test.jpg,规则2处理后会保留开头的点,输出.test,符合常规去扩展名的预期 - 句号出现在字符串末尾:如
test.jpg.,规则2处理后输出test.jpg,自动去除末尾的空后缀
内容的提问来源于stack exchange,提问作者swagatika
相关产品推荐
相关产品推荐

