检测字符串中的特定标记.C#

Dav*_*ici 13 .net c# string

我有一个非常大的字符串(HTML),在这个HTML中有特殊的标记,其中所有标记都以"#"开头,​​以"#"结尾

简单的例子

<html>
<body>
      <p>Hi #Name#, You should come and see this #PLACE# - From #SenderName#</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我需要一个能够检测这些令牌的代码并将其放入列表中.0 - #Name#1 - #Place#2 - #SenderName#

我知道我可以使用正则表达式,无论如何你有一些想法吗?

Joh*_*per 11

是的,您可以使用正则表达式.

string test = "Hi #Name#, You should come and see this #PLACE# - From #SenderName#";
Regex reg = new Regex(@"#\w+#");
foreach (Match match in reg.Matches(test))
{
    Console.WriteLine(match.Value);
}
Run Code Online (Sandbox Code Playgroud)

你可能已经猜到了\ w表示任何字母数字字符.+表示它可能出现1次或更多次.你可以在这里找到更多信息msdn doc(for .Net 4.你也会在那里找到其他版本).


Pab*_*ruz 10

你可以试试:

// using System.Text.RegularExpressions;
// pattern = any number of arbitrary characters between #.
var pattern = @"#(.*?)#";
var matches = Regex.Matches(htmlString, pattern);

foreach (Match m in matches) {
    Console.WriteLine(m.Groups[1]);
}
Run Code Online (Sandbox Code Playgroud)

答案受到了这个 SO问题的启发.

  • +1是 - 考虑使用非贪婪.*匹配; 虽然它应该是.+? (2认同)
  • 这会无法解析这样的文本:`嗨#Name#where#PLACE#more text`,或者我误解了RegEx的工作方式.它也可能不是OP的有效问题,所以这只是为了我自己的好奇心:) (2认同)