【问题标题】:Replace substring of variable length from a text file从文本文件中替换可变长度的子字符串
【发布时间】:2019-10-28 21:49:32
【问题描述】:

考虑以下字符串作为输入

(msg:"ACTIVEX Possible Microsoft WMI Administration Tools WEBSingleView.ocx ActiveX Buffer Overflow Attempt Function Call"; flow:to_client,established; file_data; content:"ActiveXObject"; nocase; distance:0; content:"WBEM.SingleViewCtrl.1"; nocase; distance:0; pcre:"/WBEM\x2ESingleViewCtrl\x2E1.+(AddContextRef|ReleaseContext)/smi"; reference:url,xcon.xfocus.net/XCon2010_ChenXie_EN.pdf; reference:url,wooyun.org/bug.php?action=view&id=1006; classtype:attempted-user; sid:2012157; rev:1; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, deployment Perimeter, tag ActiveX, signature_severity Major, created_at 2011_01_06, updated_at 2016_07_01;

我需要删除所有子字符串实例,例如reference:url,xcon.xfocus.net/XCon2010_ChenXie_EN.pdf;

但是这个参考:标签的长度是可变的。需要搜索“参考:”关键字并删除所有文本,直到找到字符“;”。

我使用了字符串类的Replace 函数,但它只替换了固定长度子字符串。

想要的输出是

(msg:"ACTIVEX Possible Microsoft WMI Administration Tools WEBSingleView.ocx ActiveX Buffer Overflow Attempt Function Call"; flow:to_client,established; file_data; content:"ActiveXObject"; nocase; distance:0; content:"WBEM.SingleViewCtrl.1"; nocase; distance:0; pcre:"/WBEM\x2ESingleViewCtrl\x2E1.+(AddContextRef|ReleaseContext)/smi";  classtype:attempted-user; sid:2012157; rev:1; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, deployment Perimeter, tag ActiveX, signature_severity Major, created_at 2011_01_06, updated_at 2016_07_01; 

【问题讨论】:

  • 您应该为此任务使用正则表达式。但目前尚不清楚您想要的输出是什么,所以我们无法帮助您。

标签: c# .net string replace


【解决方案1】:

您可以在计算计数时尝试使用Remove 而不是Replace 循环

  string input = ...;

  int start = 0;

  while (true) {
    start = input.IndexOf("reference:", start, StringComparison.OrdinalIgnoreCase);
    int stop = start >= 0 ? input.IndexOf(";", start) : -1;

    if (stop < 0)
      break;

    input = input.Remove(start, stop - start + 1);
  }

【讨论】:

    【解决方案2】:

    在这种情况下我会使用正则表达式,这里是一些示例代码。

    using System.Text.RegularExpressions;
    string pattern = "reference\:url,[.]+?;";
    string replacement= "reference:url,;";
    string output = Regex.Replace(input, pattern, replacement);
    

    【讨论】:

      【解决方案3】:

      您可以使用正则表达式删除项目:

      var result = Regex.Replace(input, "reference:[^;]*;", string.Empty, RegexOptions.IgnoreCase);
      

      【讨论】:

        猜你喜欢
        • 2014-06-21
        • 2011-06-30
        • 1970-01-01
        • 2016-09-23
        • 1970-01-01
        • 1970-01-01
        • 2021-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多