我有一个正则表达式的问题,需要一些帮助。我在mein .txt文件中有一些像这样的表达式:
19 = NAND (1, 19)
正则表达式:http://rubular.com/r/U8rO09bvTO
通过这个正则表达式,我得到了数字的分隔匹配。 但现在我需要一个正则表达式,括号中包含未知数量的数字。
例如:
19 = NAND (1, 23, 13, 24)
match1:19,match2:1,match3:23,match4:13,match5:24
我不知道号码的数量。所以我需要括号中的最小2个数字的主表达式,直到一个未知的数字。
顺便说一句,我正在使用c ++。 @ Martjin你的第一个正则表达式非常有效,谢谢。 这是我的代码:
boost::cmatch result;
boost::regex matchNand ("([0-9]*) = NAND\\((.*?)\\)");
boost::regex matchNumb ("(\\d+)");
string cstring = "19 = NAND (1, 23, 13, 24)";
boost::regex_search(cstring.c_str(), result, matchNand);
cout << "NAND: " << result[1] << "=" << result[2] << endl;
string str = result[2];
boost::regex_search(str.c_str(), result, matchNumb);
cout << "NUM: " << result[1] << "," << result[2]<< "," << result[3] << "," << result[4] << endl;
我的输出: NAND:19 = 1,23,13,24 NUM:1 ,,,
所以我的新问题是我只找到第一个号码。 结果与此解决方案完全相反:http://rubular.com/r/nqXDSuBXjc
答案 0 :(得分:1)
一个简单的(也许比一个正则表达式更清晰)是将它分成两个正则表达式。
首先运行一个正则表达式,将结果与参数分开: http://rubular.com/r/YkGdkkg4y3
([0-9]*) = NAND \((.*?)\)
然后执行一个匹配论证中所有数字的正则表达式:http://rubular.com/r/2vpSbZvz12
\d+
假设您正在使用Ruby,您可以使用函数scan
执行多次匹配的正则表达式,如下所述:http://ruby-doc.org/core-1.9.3/String.html#method-i-scan
当然你可以使用带有scan
函数的第二个正则表达式来获取该行中的所有数字,但我猜你要进一步扩展它,这就是这种方法何时会更有条理。