You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否从文件名one_two_three_four_five.rtf按规则提取字符串至A/B/C变量?

可行性分析与实现方案

当然可行!这种从后往前拆分文件名的需求在日常开发里挺常见的,完全能按照你说的“从最后一个字符开始读取”的逻辑实现。咱们一步步拆解:

核心思路

首先得把文件名的后缀(.rtf)剥离出来,只处理one_two_three_four_five这部分内容。然后通过定位倒数第一个和倒数第二个下划线的位置,就能精准拆分出你要的三个变量。

具体实现(以Python为例)

不管是用语言自带的反向查找方法,还是真的从最后一个字符开始逐个遍历,都能搞定。这里给两种思路的代码:

方法1:利用反向查找快速定位(高效简洁)

filename = "one_two_three_four_five.rtf"

# 第一步:剥离文件后缀,得到纯名称部分
name_core = filename.rsplit('.', 1)[0]  # 结果:"one_two_three_four_five"

# 第二步:找到所有下划线的位置,取倒数两个
all_underscore_indices = [idx for idx, char in enumerate(name_core) if char == '_']
last_underscore = all_underscore_indices[-1]
second_last_underscore = all_underscore_indices[-2]

# 第三步:拆分出三个变量
A = name_core[last_underscore + 1:]       # 末尾的"five"
B = name_core[second_last_underscore + 1 : last_underscore]  # 倒数第二段的"four"
C = name_core[:second_last_underscore]    # 倒数第二个下划线前的所有内容:"one_two_three"

print(f"A: {A}, B: {B}, C: {C}")

方法2:严格从最后一个字符开始遍历(贴合你的读取方向要求)

如果一定要完全遵循“从最后一个字符开始读取”的逻辑,咱们可以逐个字符反向遍历:

filename = "one_two_three_four_five.rtf"
name_core = filename.rsplit('.', 1)[0]

# 提取A:从最后一个字符开始,直到遇到第一个下划线
A_chars = []
for char in reversed(name_core):
    if char == '_':
        break
    A_chars.append(char)
A = ''.join(reversed(A_chars))  # 反转回来得到"five"

# 提取B:跳过刚才的下划线,继续反向遍历直到下一个下划线
remaining_after_A = name_core[:-len(A)-1]  # 去掉A和前面的下划线
B_chars = []
for char in reversed(remaining_after_A):
    if char == '_':
        break
    B_chars.append(char)
B = ''.join(reversed(B_chars))  # 反转回来得到"four"

# 提取C:剩下的所有内容就是倒数第二个下划线前的部分
C = remaining_after_A[:-len(B)-1]

print(f"A: {A}, B: {B}, C: {C}")

总结

两种方法都能完美实现你的需求,核心就是通过反向定位下划线的位置来拆分字符串。不管你的文件名前面有多少个下划线,只要确保至少有两个下划线(能拆分出A、B、C三部分),这个逻辑就稳定有效。

内容的提问来源于stack exchange,提问作者Arun GoWdA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 06:57:05