【问题标题】:Need regular expression that extracts sub-strings that are in some specified format需要提取某些指定格式的子字符串的正则表达式
【发布时间】:2015-06-20 15:14:46
【问题描述】:

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

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] 字符串。

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

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

更新

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

@[1:contact:Daniel Zahariev]+@[2:contact:Dankajuro].[1:contact:Daniel 扎哈里耶夫]

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

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

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

【问题讨论】:

  • 这个怎么样? @\[.*\]
  • 添加你想要捕获的规则

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


【解决方案1】:

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

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

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

RegEx Demo

【讨论】:

  • 你能稍微修改一下,以便我可以从@[1:contact:Daniel Zahariev]+@[2:contact:Dankajuro].[1:contact:Daniel Zahariev]这样的字符串中提取出来吗?其实我想要[ ]之间的空格。
  • 实际上这些就像我们在 facebook 或 stackoverflow 上使用的用户标签。我的系统检查字符串,当有 @ 时,它会检查它是普通的 @(用于电子邮件和其他)还是代表标签。这通过检查@ 之后的下一个字符来检查,如果它是[,那么'[' 和']' 之间的信息就是用户信息。其他一切都只是普通的文本。
  • 在您的演示中,它包括+。正如我所说,当遇到] 时,搜索应该完成匹配,然后重新开始搜索remaning 字符串。因此,您的演示应该提取 4 个匹配项而不是 3 个。
  • 查看我的问题更新。我发布了所需的输出。
  • 感谢@anubhava。我想问最后一件事。这是严格的,当会有+。你能不能稍微修改一下,让+ 到那个地方时其他字符也应该被忽略?
【解决方案2】:

您可以使用以下内容:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 2023-01-10
    相关资源
    最近更新 更多