在字符串中查找主题标签

Dan*_*Dan 1 c# xamarin

我正在 C# 中处理 Xamarin.Forms PCL 项目,并希望检测所有主题标签。

我尝试在空格处拆分并检查单词是否以 # 开头,但问题是如果帖子包含两个空格,例如“Hello #World Test”,它会丢失双空格

string body = "Example string with a #hashtag in it";
        string newbody = "";
        foreach (var word in body.Split(' '))
        {
            if (word.StartsWith("#"))
                newbody += "[" + word + "]";
            newbody += word;
        }
Run Code Online (Sandbox Code Playgroud)

目标输出:

包含 [#hashtag] 的示例字符串

我也只希望它有 AZ az 0-9 和 _ 停在任何其他字符

测试 #H3ll0_W0rld$%Test => 测试 [#H3ll0_W0rld]$%Test

其他堆栈问题尝试检测字符串并提取它,我希望它可以使用它并将其放回字符串中而不会丢失任何方法(例如按某些字符拆分)会丢失的任何内容。

AAA*_*ddd 7

您可以使用正则表达式#\w+$&

解释

  • ##字面上匹配字符(区分大小写)
  • \w+匹配任何单词字符(等于[a-zA-Z0-9_]
  • + 量词 - 在一次和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)

$& 在替换字符串中包含整个匹配项的副本。

例子

var input = "asdads sdfdsf #burgers, #rabbits dsfsdfds #sdf #dfgdfg";
var regex = new Regex(@"#\w+");
var matches = regex.Matches(input);
foreach (var match in matches)
{
    Console.WriteLine(match);
}
Run Code Online (Sandbox Code Playgroud)

或者

var result = regex.Replace(input, "[$&]" );
Console.WriteLine(result);
Run Code Online (Sandbox Code Playgroud)

输出

#burgers
#rabbits
#sdf
#dfgdfg
asdads sdfdsf [#burgers], [#rabbits] dsfsdfds [#sdf] [#dfgdfg]
Run Code Online (Sandbox Code Playgroud)

在此处更新演示

另一个例子