如何使用正则表达式解析变量中字符串中的R123 [i]模式?

时间:2015-02-25 04:48:12

标签: c# regex

我有这样的表达

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].+\[.+\]

2 个答案:

答案 0 :(得分:0)

您可以尝试下面的内容,

@"[RMB][^\[]*\[[^\]]*\]"

DEMO

  • [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);

IDEONE

答案 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}}