正则表达式 - 第一步

时间:2018-05-28 15:35:51

标签: c# .net regex

我想第一次在C#中使用正则表达式。我在SQL Server中使用它们很流利,但与我在这里遇到的相比,它非常容易......

首先,我想解决简单的字符串(取自另一个问题):

static void Main(string[] args)
{
    string FullString = "[http: Something] One Two Three[http: AnotherOne] Four[http: BlahBlah] sdksaod,cne 9ofew {}@:P{";
    Regex regex = new Regex(".*[[]http:.*[]]");

    foreach (Match match in regex.Matches(FullString))
    {
        Console.WriteLine(match.Value);
    }
    Console.ReadKey();
}

我希望我能在[http: Something]...收到比赛, [http: AnotherOne]...[http: BlahBlah]...,但是根据当前的尝试,匹配从[http: AnotherOne]...开始,在[http: BlahBlah]之前结束,如果我在模式的末尾添加.*,匹配是整个字符串。

我很好奇,为什么它只给我一场比赛而不是三场预期比赛。我正在浏览正则表达式手册和其他帖子,但无法理解。

获得这些比赛的有效模式是什么? (我不需要详细解释,我想我会弄明白自己会得到什么)。

所有归结为(如果我不清楚)

我想匹配[http:...],其中三个点可以是任何东西。

提前谢谢!

2 个答案:

答案 0 :(得分:1)

你需要

Regex regex = new Regex(@"(\[http:.*?])");

@用于文字字符串(可能在字符串中使用了\\)。

(启动了一个捕获组。

\将转义以下[,否则[将成为字符类的开头。

?使*非贪婪。

答案 1 :(得分:1)

尝试以下模式:@"\[http:[^\]]*\]"。这意味着“匹配以[http开头的字符序列,然后具有 ] ]之外的任何字符长度的序列,然后以*结尾

编辑:Andrew Morton建议的非贪婪版本的[^\]]R2 = S.run(YH, feed_dict = {X: np.ones((1, 4))}) 的一个很好的(可能更干净的)替代品。