1

我对正则表达式有疑问,需要一些帮助。我在 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

4

1 回答 1

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函数一起使用以从该行中获取所有数字,但我猜您将进一步扩展它,此时这种方法将更加结构化。

于 2012-12-15T01:40:35.477 回答