我有这样的表达
R4013[i] == 3 and R4014[i] == 2 AND R40[i] == 1 and R403[i+1] == 5 and R404[i+1] == 2 AND R405[i+1] == 1 R231[2]
我想用regex抓取所有变量,所以我得到变量R4013[i]
,R4014[i]
,R40[i]
等等。
我已经有像这样的正则表达式但没有工作
[RMB].+\[.+\]
答案 0 :(得分:0)
您可以尝试下面的内容,
@"[RMB][^\[]*\[[^\]]*\]"
[RMB]
从给定列表中挑选一个字符。
[^\[]*
否定了符合任何字符但不符合[
符号的字符类,零次或多次。
\[
匹配文字[
符号。
[^\]]*
匹配任何字符,但不匹配]
,零次或多次。
\]
匹配文字]
符号。
<强>代码:强>
String input = @"R4013[i] == 3 and R4014[i] == 2 AND R40[i] == 1 and R403[i+1] == 5 and R404[i+1] == 2 AND R405[i+1] == 1 R231[2]";
Regex rgx = new Regex(@"[RMB][^\[]*\[[^\]]*\]");
foreach (Match m in rgx.Matches(input))
Console.WriteLine(m.Groups[0].Value);
答案 1 :(得分:0)
R\d+\[[^\]]*\]
这个简单的正则表达式应该这样做。参见演示。
https://regex101.com/r/wU7sQ0/3
或者您可以简单地修改自己的正则表达式以使其non greedy
。您的正则表达式使用贪婪的.+
,因此它捕获的所有数据最后都是[]
而不是每个变量。 .+
是贪婪的,不会停留在您想要的[
的第一个实例上。所以请改用.+?
[RMB].+?\[.+?\]
https://regex101.com/r/wU7sQ0/4
您的正则表达式[RMB].+\[.+\]
将在[]
后.+
[RMB]
string strRegex = @"[RMB].+?\[.+?\]";
Regex myRegex = new Regex(strRegex, RegexOptions.Multiline);
string strTargetString = @"R4013[i] == 3 and R4014[i] == 2 AND R40[i] == 1 and R403[i+1] == 5 and R404[i+1] == 2 AND R405[i+1] == 1 R231[2]";
foreach (Match myMatch in myRegex.Matches(strTargetString))
{
if (myMatch.Success)
{
// Add your code here
}
}
后捕获最后{{1}}。See here
{{1}}