我想第一次在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:...]
,其中三个点可以是任何东西。
提前谢谢!
答案 0 :(得分:1)
你需要
Regex regex = new Regex(@"(\[http:.*?])");
@
用于文字字符串(可能在字符串中使用了\\
)。
(
启动了一个捕获组。
\
将转义以下[
,否则[
将成为字符类的开头。
?
使*
非贪婪。
答案 1 :(得分:1)
尝试以下模式:@"\[http:[^\]]*\]"
。这意味着“匹配以[http
开头的字符序列,然后具有 ]
除 ]
之外的任何字符长度的序列,然后以*
结尾
编辑:Andrew Morton建议的非贪婪版本的[^\]]
是R2 = S.run(YH, feed_dict = {X: np.ones((1, 4))})
的一个很好的(可能更干净的)替代品。