Excel 在字符串变量的第二个实例之后捕获子匹配
如何在字符串/数字的第二个实例之后捕获两个数字子匹配 我有一个从.txt文件变为.txt文件的#。它被捕获在一个名为“Total”的变量中,我将其声明为字符串。字符串包含数字,格式为123、456789.23或123、456.01。这个数字在.txt文件中出现了大约3次,我已经编写了一个正则表达式模式,它能够捕获这个数字的第一个实例及其子匹配Excel 在字符串变量的第二个实例之后捕获子匹配,excel,regex,vba,Excel,Regex,Vba,如何在字符串/数字的第二个实例之后捕获两个数字子匹配 我有一个从.txt文件变为.txt文件的#。它被捕获在一个名为“Total”的变量中,我将其声明为字符串。字符串包含数字,格式为123、456789.23或123、456.01。这个数字在.txt文件中出现了大约3次,我已经编写了一个正则表达式模式,它能够捕获这个数字的第一个实例及其子匹配 regex.Pattern = Total & "\s*([\d+\.\d*])\s*([\d+\.\d*])\s*" 我
regex.Pattern = Total & "\s*([\d+\.\d*])\s*([\d+\.\d*])\s*"
我试图捕获的.txt文件部分可能显示为
123,456,789.38
2.180
251.517
或
我想捕捉2.180和251.517
第一个实例包括前面的单词“Number of:”,我试图通过写以下内容使模式避开前面的“:”:
regex.Pattern = "[^:\s]" & Total & "\s*([\d+\.\d*])\s*([\d+\.\d*])\s*"
它仍然会获取第一个实例以及第一个实例之后的数字。第二个实例前面没有任何定义词,只有一个空行,如下面的一行:
123,456,789.38
2.180
251.517
其他信息:
Dim regex As Object:Set regex=CreateObject(“vbscript.regexp”)
regex.Pattern=Total&“\s*([\d+\.\d*])\s*([\d+\.\d*])\s*”
将MCS作为对象
设置MCS=regex.Execute(myText)
作为字符串的尺寸总计:总计=MCS(0)。子匹配(0)
作为字符串的Dim SUBSMTCH1:SUBSMTCH1=MCS(0)。子匹配(1)
作为字符串的Dim submatch2:submatch2=MCS(0)。子匹配(2)
其中,mytext
是完全作为字符串的.txt文件的内容
变量“Total”的不同实例之间也有单词和数字,例如
我也不确定123456789.38的前两个实例之间会有多少/多少文本/数字,因此我正在尝试考虑如何使其具有灵活性
当我提到第二个实例时,我的意思是数字123456789.38(即名为“Total”的变量)在文档中出现了三次。我想捕获在该数字之后出现的两个子匹配。但是,由于它出现了三次,我想捕获在第二次弹出123456789.38
后出现的两个子匹配
链接到文本文件。输出:
submatch1 = 2.180
submatch2 = 251.517
目前,它正在捕获
submatch1 = 97
submatch2 = 5
使用以下模式:
regex.Pattern=Replace(总计,“.”,“\”&“\s*([.\d]+)\s*([.\d]+)”
您可以使用
regex.Pattern=“^(?:[\s\s]*?”&Replace(总计,“.”,“\”&“{2}\D+([.\D]+)\s*([.\D]+)”
这是你可以看到的地方
正如所料
详细信息
-字符串的开头^
-任何0+字符出现两次,尽可能少,然后(?:[\s\s]*?123456\.78){2}
字符串123456.78
-1个或多个非数字字符\D+
-第1组:一个或多个点或数字([.\d]+)
-0+空格\s*
-第2组:一个或多个点或数字([.\d]+)
[
和]
放在数字匹配模式的周围,[\d+\.\d*]
仅匹配单个数字、+
、
或*
字符,从而破坏了数字匹配模式。使用\d+(?:,\d+*(?:\。\d+)
匹配数字。请发布,现在还不太清楚您拥有的确切文本和应用的确切模式。@WiktorStribiżew,请查看文章中的编辑,非常感谢您的解释,我明白了为什么它现在只拾取了一个数字!要想出一个可行的办法还是有点难。Total
变量中到底是什么?为什么使用后要初始化它?如果您的Total
持有“数字”单词,请查看它如何工作-^(?:[\s]*?Number){2}\D+(\D+(?:,\D+)*(?:\。\D+))\s+(\D+(?:,\D+)*(?:\。\D+)
()。如果不起作用,请编辑regex fiddle并共享更新的链接,其中包含对不起作用的内容的注释。Hi@WiktorStribiżew,Total变量来自另一个regex模式,它在其中拾取单词“number of:”Dim reg2 As Object:Set reg2=CreateObject(“vbscript.regexp”)reg2后的第一个数字。pattern=“number of:\s*[\$?](\d+[\,\。\d]*)\s*“设置MCS=reg2.Execute(myText)Total=MCS(0)。子匹配(0)将从.txt文件更改为.txt文件。因此,如果使用regex.Pattern=“^:([\s\s]*?”&Total&>”{2}\d+(\d+,\d+)*(?:\。\d+)(?:\。\d+))*(?::\。。\d+))\s+)(\d+)(?::\。。。\d+)
,它现在起作用了吗?嗨,Wiktor,我摆弄了一下我的总变量,你的建议起作用了!再次感谢你的帮助,看起来这是一个变量值的问题。
submatch1 = 2.180
submatch2 = 251.517
submatch1 = 97
submatch2 = 5