正则表达式 (.NET) - 无法识别的分组构造



我被以下让以下正则表达式工作(VB.NET(难倒了

输入:

+1.41 DS +0.93 DC x 3* @12.5 mm (4.00 Rx Calc)

预期输出:

+0.93

我已经得到了以下表达:

DS[ t]*[+-][ t]*d{1,2}.d{2}

这将返回的结果

DS +0.93

当我修改正则表达式时,我只需要返回 +0.93(没有任何前导空格(:

(?DS[ t]*)([+-][ t]*d{1,2}.d{2})

我收到错误无法识别的分组结构,我不明白为什么它会给我这个错误。我认为我的不匹配组不正确,但我找不到原因/在哪里?

你可以在这里使用积极的回溯:

(?<=DS[ t]*)[+-][t ]*d{1,2}.d{2}
^^^

查看正则表达式演示

为了确保数字和DS匹配为整个单词(前后没有字母、数字或_(,请使用单词边界:

(?<=bDS[ t]*)[+-][t ]*d{1,2}.d{2}b

d{2}后的负面展望(?!d)

(?<=bDS[ t]*)[+-][t ]*d{1,2}.d{2}(?!d)

查看另一个正则表达式演示。

  • (?<=bDS[ t]*)- 与字符串中紧接在DS前面的位置匹配的正面查看,后跟 0+ 空格或制表符
  • [+-]-+-
  • [t ]*- 0+ 空格或制表符
  • d{1,2}- 1 或 2 位数字
  • .- 一个点
  • d{2}- 2 位数字
  • (?!d)- 当前位置右侧不允许立即显示数字。

VB.NET 演示:

Dim my_rx As Regex = New Regex("(?<=bDS[ t]*)[+-][t ]*d{1,2}.d{2}(?!d)")
Dim my_result As Match = my_rx.Match(" +1.41 DS +0.93 DC x 3* @12.5 mm (4.00 Rx Calc)")
If my_result.Success Then
Console.WriteLine(my_result.Value) ' => +0.93
End If

最新更新