【问题标题】:Unable to figure out regex pattern无法找出正则表达式模式
【发布时间】:2011-10-01 05:13:25
【问题描述】:

我有一个带有一些自定义公式的字符串,例如FVAL("A")+FVAL(B)。我想找出FVAL() 中没有引号的所有字符串。

所以基本上我想提取出B,因为它周围没有引号。

【问题讨论】:

  • 当你有 FVAL(ABC+"B") 时会发生什么?

标签: regex vb.net string .net-2.0


【解决方案1】:

使用

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") 的东西怎么办?我如何只提取第一个参数?
  • 您应该为此创建一个新问题,因为这是一个完全不同的问题。
【解决方案2】:

你会想要一个类似

的表达式
"FVAL\\(([^\"]+)\\)"

其中包括一组用于捕获组的括号。

【讨论】:

  • 不工作。它在字符串FVAL("A")+FVAL(B) 中找不到任何匹配项。正则表达式 ismatch 函数返回 false。 Regex.IsMatch(vbCode, "FVAL\([^""](.+?)[^""]\)", RegexOptions.IgnoreCase)
猜你喜欢
  • 2012-01-05
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 2014-08-20
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 1970-01-01
相关资源
最近更新 更多