gpt4 book ai didi

c# - 如何找到由周围下划线限定的 5 个数字的变量集?

转载 作者:行者123 更新时间:2023-11-30 21:37:30 29 4
gpt4 key购买 nike

我将文件名拉入变量 (@[User::FileName]) 并尝试从该字符串中提取工单号(始终是 5 个数字,两边都带有下划线)。例如,文件名类似于 - "ABC_2017_DEF_9_12_GHI_35132_S5160.csv"。我希望结果返回“35132”。我找到了如何执行此操作的示例,例如 SUBSTRING(FileName,1,FINDSTRING(FileName,"_",1) - 1) 但下划线并不总是位于同一位置。

是否可以在表达式构建器中执行此操作?

回答:

public void Main()
{
string strFilename = Dts.Variables["User::FileName"].Value.ToString();
var RegexObj = new Regex(@"_([\d]{5})_");
var match = RegexObj.Match(strFilename);

if (match.Success)
{
Dts.Variables["User::WorkOrder"].Value = match.Groups[1].Value;
}
Dts.TaskResult = (int)ScriptResults.Success;
}

最佳答案

首先,您提供的示例 ABC_2017_DEF_9_12_GHI_35132_S5160.csv 包含位于下划线之间的 4 个数字:

2017 , 9 , 12 , 35132

我不知道文件名是否可能包含很多个 5 位数字可以出现很多次,所以在我的回答中,我将假设您要返回的数字是由 5 位数字组成的数字的最后一次出现。

解决方案

您必须使用以下正则表达式:

(?:_)\K[0-9][0-9][0-9][0-9][0-9](?=_)  

DEMO

或作为 @MartinSmith建议(在评论中),可以使用下面的正则表达式:

_([\d]{5})_

在 SSIS 中实现 RegEx

  1. 首先添加另一个变量(例如:@[User::FileNumber])
  2. 添加脚本任务并选择 @[User::Filename] 变量作为 ReadOnlyVariable,@[User:FileNumber] 作为 ReadWriteVariable
  3. 在脚本任务中使用以下代码:

    using System.Text.RegularExpressions;

    public void Main()
    {

    string strFilename = Dts.Variables["filename"].Value.ToString();
    string strNumber;
    var objRegEx = new Regex(@"(?:_)\K[0-9][0-9][0-9][0-9][0-9](?=_)");
    var mc = objRegEx.Matches(strFilename);


    //The last match contains the value needed
    strNumber = mc[mc.Count - 1].Value;


    Dts.Variables["FileNumber"].Value.ToString();

    Dts.TaskResult = (int)ScriptResults.Success;
    }

关于c# - 如何找到由周围下划线限定的 5 个数字的变量集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47166536/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com