需要正则表达式来提取某些指定格式的子字符串

时间:2015-06-20 15:14:47

标签: c# asp.net .net regex string

我有以下函数,它提取以某个字符开头的所有子字符串:

public static List<string> GetStringsStartingWith(string text, char character)
    {
        List<string> output = new List<string>();
        foreach (Match match in Regex.Matches(text, @"(?<!\w)" + character + @"\w+"))
        {
            try
            {
                output.Add(match.Value.Replace(character.ToString(), ""));
            }
            catch (NullReferenceException) { continue; }
        }
        return output;
    }

它适用于像@test这样的普通字符串。但现在我有一些字符串具有以下格式:

  

您好,这是@ [test1]。[test2]。[test3] string。

现在,我想要的是一个正则表达式,可以从上面的字符串中提取@[test1].[test2].[test3]。并且可以有许多这种字符串的格式。例如,某些字符串可能只是@[test]@[test1].[test2]

上面的函数无法提取字符串并返回null

更新

我还想提取那些在[ ]之间有空格的子字符串。像这样:

  

@ [1:联系人:Daniel Zahariev] + @ [2:联系人:Dankajuro]。[1:联系人:Daniel   Zahariev]

实际上这些就像我们在facebook或stackoverflow评论中使用的用户标签。我的系统检查字符串,当有@时,它检查它是否是正常的@(对于电子邮件和其他人)或代表标记。通过检查@之后的下一个字符来检查,如果它是[,那么[]之间的信息就是用户信息。其他一切都只是一个普通的文本。

所以对于上面的字符串输出应该是:

@[1:contact:Daniel Zahariev]
@[2:contact:Dankajuro]

2 个答案:

答案 0 :(得分:2)

你可以试试这个正则表达式:

Regex.Matches(text, @"(?<!\w)" + character + @"(\w+\b|\[.*?\](?=[\s+]|$))")

匹配@

之后的所有非空格字符

RegEx Demo

答案 1 :(得分:0)

您可以使用以下内容:

foreach (Match match in Regex.Matches(text, @"(?<!\w)" + character + @"\S+"))
                                                                       ↑↑↑