【问题标题】:C# search into a string for a specific pattern, and put in an ArrayC# 在字符串中搜索特定模式,并放入一个数组
【发布时间】:2011-08-08 21:33:38
【问题描述】:

我以以下字符串为例:

<tr class="row_odd"><td>08:00</td><td>08:10</td><td><a href="editactivity.php?act=11111">TEST1</a></td></tr><tr class="row_even"><td>08:10</td><td>08:15</td><td><a href="editactivity.php?act=22222">TEST2</a></td></tr><tr class="row_odd"><td>08:15</td><td>08:20</td><td><a href="editactivity.php?act=33333">TEST3</a></td></tr><tr class="row_even"><td>08:20</td><td>08:25</td><td><a href="editactivity.php?act=44444">TEST4</a></td></tr><tr class="row_odd"><td>08:25</td><td>08:30</td><td><a href="editactivity.php?act=55555">TEST5</a></td></tr>

我需要将输出作为一维数组。 比如 11111=myArray(0) , 22222=myArray(1) , 33333=myArray(2) ,......

我已经尝试过 myString.replace,但我似乎只能用这种方式替换单个 Char。所以我需要使用表达式和一个 for 循环来填充数组,但由于这是我的第一个 c# 项目,这对我来说太遥远了。

谢谢,

【问题讨论】:

  • String.Replace 有一个将两个字符串作为参数的重载。确保对字符串文字使用双引号。 (即“)

标签: c# arrays search replace expression


【解决方案1】:

使用 IndexOf 和 Substring 的组合......这样的东西会起作用(不确定你的字符串有多少变化)。这可能比您想出的任何正则表达式都要快。虽然,看看你的字符串的长度,它可能不是一个真正的问题。

    public static List<string> GetList(string data)
    {
        data = data.Replace("\"", ""); // get rid of annoying "'s
        string[] S = data.Split(new string[] { "act=" }, StringSplitOptions.None);
        var results = new List<string>();

        foreach (string s in S)
        {
            if (!s.Contains("<tr"))
            {
                string output = s.Substring(0, s.IndexOf(">"));
                results.Add(output);
            }

        }
        return results;
    }

【讨论】:

  • 我同意,或者你可以使用正则表达式,它们有时更简单
【解决方案2】:

有几种方法可以做到这一点。一对夫妇是:

a) 使用正则表达式在字符串中查找您想要的内容。使用了命名组,因此您可以直接访问匹配项
http://www.regular-expressions.info/dotnet.html

b) 在子字符串所在的位置拆分表达式(例如,在“act =”上拆分)。你必须做更多的解析才能得到你想要的,但这并不难,因为它将在拆分字符串的开头(并且你有其他没有你的子字符串的字符串)

【讨论】:

    【解决方案3】:

    您似乎想使用正则表达式搜索模式。然后将匹配项(使用命名组)返回到数组中。

    var regex = new Regex("act=\?(<?Id>\d+)");
    regex.Matches(input).Cast<Match>()
         .Select(m => m.Groups["Id"])
         .Where(g => g.Success)
         .Select(g => Int32.Parse(g.Value))
         .ToArray();
    

    (PS。我对正则表达式模式并不积极 - 你应该自己检查一下)。

    【讨论】:

      【解决方案4】:

      使用带有strinng-variable.split() 函数的"&lt;tr&gt;","&lt;/tr&gt;","&lt;td&gt;","&lt;/td&gt;", "&lt;a&gt;","&lt;/a&gt;" 等HTML 标签拆分字符串。这为您提供了数组列表。

      Split html row into string array

      【讨论】:

        猜你喜欢
        • 2014-05-27
        • 2012-08-12
        • 1970-01-01
        • 2011-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-24
        相关资源
        最近更新 更多