Skip to main content
 首页 » 编程设计

c#之正则表达式获取以@开头的所有内容并删除所有未包含字符之后的所有内容

2024年02月27日37xing901022

我有以下内容:

        Regex RgxUrl = new Regex("[^a-zA-Z0-9-_]"); 
        foreach (var item in source.Split(' ').Where(s => s.StartsWith("@"))) 
        { 
            var mention = item.Replace("@", ""); 
            mention = RgxUrl.Replace(mention, ""); 
            usernames.Add(mention); 
        } 

电流输入 > 输出

  • @fish 和薯条是@good > fish, good
  • @fish and fries 和@Mary's beer 都是@good > fish, good, marys<

期望的输入 > 输出

  • @fish 和薯条是@good > fish, good
  • @fish and fries 和@Mary's beer 都是@good > fish, good, Mary

此处的关键是删除违规字符之后的所有内容。如何实现?

请您参考如下方法:

你用空格分割一个字符串,检查一个 block 是否以@开头, 然后如果是,删除所有 @字符串中的符号,然后使用正则表达式删除所有非字母数字,-和 _字符串中的字符,然后将其添加到列表中。

你可以用一个正则表达式来做到这一点:

var res = Regex.Matches(source, @"(?<!\S)@([a-zA-Z0-9-_]+)") 
    .Cast<Match>() 
    .Select(m=>m.Groups[1].Value) 
    .ToList(); 
Console.WriteLine(string.Join("; ", res)); // demo 
usernames.AddRange(res); // in your code 

参见 C# demo

图案细节:

  • (?<!\S) - 当前位置的左侧不能有非空白符号(即必须有空白或字符串开头)(这里是后视是因为原始代码用空格分割了字符串)
  • @ - 一个 @符号(它不是后续组的一部分,因为这个符号在原始代码中被删除)
  • ([a-zA-Z0-9-_]+) - 捕获第 1 组(通过​​ m.Groups[1].Value 访问)匹配一个或多个 ASCII 字母、数字、-和 _符号。