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

标签 c# regex

我有以下内容:

        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 字母、数字、-_符号。

关于c# - 正则表达式获取以@开头的所有内容并删除所有未包含字符之后的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43334308/

相关文章:

c# - 构建 vSphere DLL 失败并出现 CS8078 : An expression is too long or complex to compile

c# - Microsoft.mshtml.dll 重新分发问题

c# - 如何从当前鼠标光标位置开始窗体的 StartPosition?

c# - 正则表达式替换行首的任意数量的匹配项

regex - 与 EXACTLY 2 '*' 匹配的行的 Grep 命令

c# - 清除 CheckBoxList 的值?

regex - 在 R 中的 grep 函数中使用正则表达式

c# - 如何从纯文本解析 C# 中的存储过程签名

javascript - @mentions 的这个正则表达式有什么作用?

java - 尝试使用正则表达式将字符串分成三部分