我将以下字符串作为示例:
<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>
我需要将输出作为onedimensional Array。 比如11111 = myArray(0),22222 = myArray(1),33333 = myArray(2),......
我已经尝试了myString.replace,但似乎我只能用这种方式替换一个Char。所以我需要使用表达式和for循环来填充数组,但由于这是我的第一个c#项目,这对我来说太过分了。
谢谢,
答案 0 :(得分:1)
您似乎想要使用正则表达式搜索模式。然后将匹配(使用命名组)返回到数组中。
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。我对正则表达式模式不肯定 - 你应该自己检查一下。)
答案 1 :(得分:0)
使用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 :(得分:0)
你可以通过几种方式做到这一点。一对夫妇是:
a)使用正则表达式在字符串中查找所需内容。使用命名组,以便您可以直接访问匹配 http://www.regular-expressions.info/dotnet.html
b)将表达式拆分为子串的位置(例如,拆分为“act =”)。你需要做一些更多的解析来得到你想要的东西,但这不会很困难,因为它将在分裂字符串的开头(并且你的其他srings中没有你的子字符串)< / p>
答案 3 :(得分:0)
使用带有"<tr>","</tr>","<td>","</td>", "<a>","</a>"
功能的strinng-variable.split()
等HTML标记拆分字符串。这给出了数组列表。