我有一个非常大的文本文件,其中有多个" CLM * [NUMBER I WANT] *"的实例。我已经能够使用正则表达式主要获得这个感谢本网站上的另一个用户,但我得到的结果是显示CLM *部分,当我真的只想要这个数字时。您可以在下面看到相关代码。
Dim strClaimData As String = ""
Dim strClaimNumber As String = ClaimLoadedGetCLM(strClaimData)
Public Function ClaimLoadedGetCLM(ByVal ediString As String) As String
Dim regex As New Regex("CLM\*(\d*?\*??\d*)")
Dim ClaimMatches As MatchCollection = regex.Matches(strClaimData)
For Each strClaimData As Match In ClaimMatches
lstClaimLoaded837Data.Items.Add(strClaimData.Value)
Next
End Function
我尝试了一些我在网上找到的东西,比如附加一个\ K或\ 2,但如果我这样做,我就会遇到编译错误。
https://regex101.com/r/jH9eJ7/1
这显示了我想要的"匹配1,组1和#34;但我无法弄清楚如何实现它。我认为追加/ 1会起作用,但只返回没有数字的CLM *。
非常感谢任何帮助。
答案 0 :(得分:1)
您要做的是将CLM\*
部分包裹在possitive lookbehind assertion
:
(小于?= CLM \ *)
这确实说明(\d*\.?\d*)
前面有CLM*
,但匹配中不包含CLM*
。
答案 1 :(得分:0)
您可以告诉它使用捕获的组。
替换:
strClaimData.Value
使用:
strClaimData.Groups[1].Value
在你的for循环中。