使用正则表达式跳过字符部分

时间:2014-05-30 22:57:04

标签: c# .net regex

我有一些传入的OData查询信息,我需要解析字符串的某些部分以确定某些内部过滤技术。

我有这个正则表达式

(?<LastWord>\A^[^\(]*|(eq|ne|gt|ge|lt|le|add|sub|mul|div|mod)|[-1$])

适用于以下字符串:

"startswith(tolower(columnName),'y') eq true" -- result is --> startswitheq
"endswith(tolower(columnName),'y') eq true"   -- result is --> endswitheq
"indexof(tolower(columnName),'y') ge 0"       -- result is --> indexofge
"indexof(tolower(columnName),'y') eq -1"      -- result is --> indexofeq-1
"tolower(Column) eq 'y'"                      -- result is --> tolowereq
"tolower(columnName) ne 'y'"                  -- result is --> tolowerne

以下字符串不像其他字符串一样解析:

"startswith(tolower(Column),'1') eq true" -- result is --> startswith1eq

它被解析为&#34; startswith1eq&#34;,所以我需要帮助上面的正则表达式让它从头开始跳过整个部分&#34;(&#34;到最后一次出现的&#34;)&#34;,有什么建议吗?

这是一个.Net小提琴,包含当前正则表达式和上面的失败项: .Net Fiddle Code example

由于

1 个答案:

答案 0 :(得分:0)

看起来你打算做一个非捕获组,但做了“其中任何一个”。

(?<LastWord>\A^[^\(]*|(eq|ne|gt|ge|lt|le|add|sub|mul|div|mod)|(?:-1$))

这对你有用吗?