我想编写一个正则表达式来从变量声明语句中提取所有变量值及其名称。说我有
整数 i,k = 10,l=0
我想写一个像 int\s^,?|(^,?)* 这样的正则表达式,但这也将接受 k = 10 即(前面没有 int)基本上的想法是如果字符串以 int 开头,那么将变量列表分开经过 ,
我知道要提取 csv 值,但这里我的字符串也有一些初始值。我该如何解决?
我想编写一个正则表达式来从变量声明语句中提取所有变量值及其名称。说我有
整数 i,k = 10,l=0
我想写一个像 int\s^,?|(^,?)* 这样的正则表达式,但这也将接受 k = 10 即(前面没有 int)基本上的想法是如果字符串以 int 开头,那么将变量列表分开经过 ,
我知道要提取 csv 值,但这里我的字符串也有一些初始值。我该如何解决?
开始考虑定义的结构,比如说,
(a line can start with some spaces) followed by,
(Type) followed by
(at least one space)
(variable_1)
(optionally
(comma // next var
|
'='number // initialization
) ...`
然后尝试转换每个组:
^ \s* \w+ \s+ \w+ ? (',' | '=' \d+ ) ...
line some type at least var optionally more or init some
start spaces (some chars) one space (some chars) vars val digits
作为作业留下来删除空格并修复最终的正则表达式。
以下是一些您可以使用的有用信息
您可以从 [C# Grammar]( http://msdn.microsoft.com/en-us/library/aa664812(VS.71).aspx)构建您的正则表达式。但是构建一个解析器肯定会更好。
试试这个:
^(int|[sS]tring)\s+\w+\s*(=\s*[^,]+)?(,\s*\w+\s*(=\s*[^,]+)?)*$
它将与您的示例代码匹配
int i,k = 10,l=0
并对您可能使用或未使用的语言进行一些假设,它也会匹配:
int i, j, k=10, l=0
string i=23, j, k=10, l=0