很多时候,我们需要匹配两个字符串之间的内容,比较典型的如引号中的内容:”123”中的123,括号中的内容:[abc]中的abc,或者是两个特定字符串之间的内容,如120045673389字符串中00和33之间的4567。LabVIEW中有匹配模式、匹配正则表达式等相关的函数可以使用。但是对于上面的这种要求,匹配两个字符串之间的内容,则并不能简单的使用一次匹配模式或正则表达式的方式来实现(可以匹配一次,但是要通用,则需要格式化正则表达式)。实际上,这里的前后两个字符串,是属于两个匹配的要求了。所以,这里可以仍然是可以考虑使用匹配模式、匹配正则表达式的方式来处理,但是要稍微改造一下才能达到要求。
先来看方法一:直接使用两次匹配模式,第一次匹配两个字符中的前一个字符;第二次匹配两个字符中的后一个。这种方法简单明了,速度也快:
匹配模式
LabVIEW匹配两个字符串之间的内容-2次匹配模式.vi
如上面的示例中,输入字符串是你【我】他,正则表达式前匹配是【,后匹配是】。则第一次使用匹配模式时,子字符串之前的内容是你,匹配子字符串是【,子字符串之后的内容是我】他。然后将子字符串之后的内容再做一次匹配模式,正则表达式后匹配是】,子字符串之前的内容是我,匹配子字符串是】,子字符串之后的内容是他。实际上,按照要求,这里的子匹配2,就是我们期望得到的数据,其他的内容只是方便查看具体内容显示出来的。所有匹配的输出项可以不用连接字符串。
当然,这里使用了匹配模式,对于如[]等符号,需要加转义字符来描述。
[]没有转义字符时不能匹配
[]有转义字符时能匹配
方法二、格式化写入字符串+匹配正则表达式
格式化写入字符串
先使用格式化写入字符串函数得到具体要匹配的正则表达式,然后再使用匹配正则表达式函数来处理:
匹配正则表达式
LabVIEW匹配两个字符串之间的内容-格式化写入字符串+匹配正则表达式.vi
这里需要注意一下,匹配正则表达式,需要使用三个子匹配,其中的子匹配2,才是我们期望得到的。这里的匹配正则表达式是(%s)(.*)(%s),第一个括号中的内容就是前匹配,第二个括号内中的内容,就是我们期望匹配的内容,第三个括号中的内容是后匹配。(%s)(.*)(%s)匹配的结果是所有匹配,在(%s)(.*)(%s)之前的,则是匹配之前;在(%s)(.*)(%s)之后的则为匹配之后。如果已经知道具体的要匹配的内容,那么第一、第三个括号里可以直接写入要匹配的内容,就不再需要格式化写入字符串。这里的[]等特殊符号,仍然需要使用转义字符:
不使用转义字符时出错
缺少A)
使用转义字符能正常匹配
VI实例:LV2020版:
LabVIEW匹配两个字符串之间的内容方法一二
http://visionbbs.com/thread-32733-1-1.html
(出处: 石鑫华视觉论坛)