【发布时间】:2011-10-01 05:13:25
【问题描述】:
我有一个带有一些自定义公式的字符串,例如FVAL("A")+FVAL(B)。我想找出FVAL() 中没有引号的所有字符串。
所以基本上我想提取出B,因为它周围没有引号。
【问题讨论】:
-
当你有 FVAL(ABC+"B") 时会发生什么?
标签: regex vb.net string .net-2.0
我有一个带有一些自定义公式的字符串,例如FVAL("A")+FVAL(B)。我想找出FVAL() 中没有引号的所有字符串。
所以基本上我想提取出B,因为它周围没有引号。
【问题讨论】:
标签: regex vb.net string .net-2.0
使用
FVAL\(([^")]*)\)
这匹配FVAL(,后跟除引号或右括号外的任意数量的字符,然后是)。
另一种可能性(匹配在$0而不是$1:
(?<=FVAL\()[^")]*(?=\))
这匹配由FVAL( 和) 包围的非引号/非括号字符串。
在 VB.net 中:
Dim RegexObj As New Regex("FVAL\(([^"")]*)\)", RegexOptions.IgnoreCase)
Dim MatchResult As Match = RegexObj.Match(SubjectString)
While MatchResult.Success
ResultList.Add(MatchResult.Groups(1).Value)
MatchResult = MatchResult.NextMatch()
End While
或
Dim RegexObj As New Regex("(?<=FVAL\()[^"")]*(?=\))", RegexOptions.IgnoreCase)
Dim MatchResult As Match = RegexObj.Match(SubjectString)
While MatchResult.Success
ResultList.Add(MatchResult.Value)
MatchResult = MatchResult.NextMatch()
End While
【讨论】:
MVAL("A","01-01-1900") 的东西怎么办?我如何只提取第一个参数?
你会想要一个类似
的表达式"FVAL\\(([^\"]+)\\)"
其中包括一组用于捕获组的括号。
【讨论】:
FVAL("A")+FVAL(B) 中找不到任何匹配项。正则表达式 ismatch 函数返回 false。 Regex.IsMatch(vbCode, "FVAL\([^""](.+?)[^""]\)", RegexOptions.IgnoreCase)