我想编写一个RegEx来从变量声明语句中提取所有变量值及其名称。说我有
int i,k = 10,l = 0
我想写一个像int \ s ^,??|(^,?)*的正则表达式* 但这也会接受 k = 10即(前面没有int) 基本上是想法 如果string以int开头 获取由
分隔的变量列表我知道要提取csv值,但这里我的字符串也有一些初始值。我该如何解决?
答案 0 :(得分:3)
开始考虑定义的结构,比如说,
(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
留下作为删除空格并修复最终正则表达式的作业。
答案 1 :(得分:2)
以下是您可以使用的一些有用信息
答案 2 :(得分:0)
您可以从[C#Grammar](http://msdn.microsoft.com/en-us/library/aa664812(VS.71).aspx)建立正则表达式。但构建解析器肯定会更好。
答案 3 :(得分:0)
试试这个:
^(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