我需要找到[]
的正则表达式例如,如果字符串是 - Hi [Stack],这是我需要[查找]的[标签]。
它应该回归 堆栈,标签,查找
答案 0 :(得分:27)
非常简单,您只需要(1)使用反斜杠转义括号,(2)使用(.*?)
来捕获内容。
\[(.*?)\]
括号是一个捕获组,它们捕获其内容供以后使用。 .*
之后的问号使得匹配非贪婪。这意味着它将匹配可能的最短匹配,而不是最长的匹配。当你在一行中有多个匹配时,会出现贪婪和非贪婪之间的区别:
Hi [Stack], Here is my [Tag] which i need to [Find].
^______________________________________________^
贪婪的匹配将在两组方括号之间找到最长的字符串。那是不对的。非贪婪的比赛会找到最短的:
Hi [Stack], Here is my [Tag] which i need to [Find].
^_____^
无论如何,代码最终会looking like:
string regex = @"\[(.*?)\]";
string text = "Hi [Stack], Here is my [Tag] which i need to [Find].";
foreach (Match match in Regex.Matches(text, regex))
{
Console.WriteLine("Found {0}", match.Groups[1].Value);
}
答案 1 :(得分:3)
\[([\w]+?)\]
应该有效。如果您还需要包含特殊字符,则可能需要更改匹配组。
答案 2 :(得分:3)
取决于您所说的环境:
\[([^\]]+)]
答案 3 :(得分:0)
.NET语法,负责多个嵌入式括号:
\[ ( (?: \\. | (?<OPEN> \[) | (?<-OPEN> \]) | [^\]] )*? (?(OPEN)(?!)) ) \]
这会计算[
中已打开的OPEN
部分的数量,并且只有在OPEN
最后为0时才会成功。
答案 4 :(得分:0)
我遇到了类似的问题,发现这也可以解决问题。
\[\w{1,}\]
\ w 表示 元字符 。这将匹配1个或多个单词字符。
使用 n {X,} 量词匹配可以获取不同金额的任何字符串。在故意遗漏第二个数字的情况下,该表达式表示要匹配的1个或多个字符。