我被以下让以下正则表达式工作(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