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

本文关键字:格式 字符串 正则表达式 定格 提取 | 更新日期: 2023-09-27 17:57:11

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

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]。[测试2]。[测试3] 字符串。

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

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

更新

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

@[1:联系人:丹

尼尔·扎哈里耶夫]+@[2:联系人:丹卡朱罗]。[1:联系人:丹尼尔 扎哈里耶夫]

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

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

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

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

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

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

匹配@后的所有非空格字符

正则表达式演示

您可以使用

以下内容:

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