You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何截取字符串中首次匹配前的内容并保存?附场景示例

刚好处理过不少类似的字符串截取需求,给你详细拆解这两个问题:

问题1:截取字符串中首次匹配位置之前的所有内容

核心思路是找到目标子串首次出现的起始索引,然后截取从字符串开头到该索引的部分就行。这里给你举两种常用语言的实现:

Python 实现

# 示例字符串
original_str = "2024-05-20_log_file.txt"
# 要匹配的子串
target_sub = "_log"

# 找到首次匹配的索引(找不到会返回-1)
match_pos = original_str.find(target_sub)
if match_pos != -1:
    # 切片截取开头到匹配位置之前的内容
    result = original_str[:match_pos]
    print(result)  # 输出:2024-05-20
else:
    print("未找到目标子串,返回原字符串或做其他处理")

Bash 实现

用参数扩展的%%语法,它会从字符串末尾开始删除最长的匹配模式,刚好能实现截取首次匹配前的内容:

original_str="2024-05-20_log_file.txt"
target_sub="_log"
result="${original_str%%$target_sub*}"
echo $result  # 输出:2024-05-20
问题2:从data = some-data.in.this.format中提取some-data

这个需求分两步:先去掉固定前缀data = ,再截取到第一个.之前的部分。同样给你两种实现:

Python 实现

方法一(分割法,简洁直观):

data_str = "data = some-data.in.this.format"
# 先按前缀分割,取后面的部分
content_after_prefix = data_str.split("data = ")[1]
# 再按第一个`.`分割,取第一个元素
result = content_after_prefix.split(".")[0]
print(result)  # 输出:some-data

方法二(索引定位法,更严谨,适合前缀可能重复的场景):

data_str = "data = some-data.in.this.format"
# 定位前缀结束的位置
prefix_end_pos = data_str.find("data = ") + len("data = ")
# 从前缀结束位置开始找第一个`.`的索引
first_dot_pos = data_str.find(".", prefix_end_pos)
# 截取中间部分
result = data_str[prefix_end_pos:first_dot_pos]
print(result)  # 输出:some-data

Bash 实现

sed去掉前缀,再用cut.分割取第一部分:

data_str="data = some-data.in.this.format"
result=$(echo "$data_str" | sed 's/^data = //' | cut -d. -f1)
echo $result  # 输出:some-data

内容的提问来源于stack exchange,提问作者Alex Ritchie

火山引擎 最新活动