找回密码
 加入
搜索
查看: 4958|回复: 9

[AU3基础] 匹配多种可能性的字符串,和逻辑判断 ?【已解决】

  [复制链接]
发表于 2014-12-28 12:21:54 | 显示全部楼层 |阅读模式
本帖最后由 Huiseyu 于 2014-12-28 16:42 编辑

有点复杂,纠结,不知道如何表达。
研究了一下,文件 ABCD-147258369x.lst 可能出现蓝色部分字体的几种书写格式
在以下蓝色字符中匹配关键字符"147258369x" ,即可满足条件,我的代码有点问题,书写格式中有"-" 的话, -v 和 -x 是两个版本,要区分出来,但是现在都能匹配,这就不符合要求了。
ABCD-147258369x.lst
ABCD-147258369-x.lst
ABCD-147258369-v.lst
ABCD-147258369v.lst
ABCD-147258369.lst
$model = "ABCD-147258369x"       ;V  /   X   /   -X   /  -V  /  " 空 " 格式化字符串后的五种可能,五种可能另需要区别出 X / V  !
ConsoleWrite($model& @CRLF &"需要在字符串中匹配;V  /   X   /   -X   /  -V  /  '' 这五种可能,大小写可忽略" &@CRLF )
MsgBox(4096,"Debug",StringRegExp(StringLower($Model),"147258369[x]")=1 ? "Okay" : "失效了")
这就是一部分源码,本人正在学习中,希望有人指点迷津,现在俺真的木有办法了。

--------------------------------------------------------------------------------------------------------------------------------------------------
更新:这可能必须用到正则,本人正在努力学习。感谢2楼半芯竹细心解答。我表达不够好。
在文件名 ABCD-147258369x.lst 中需要匹配关键字符 147258369x ,匹配后x不能被去掉。 而整个字符串长度是没有规则的。
而自己更新后的代码,可以解决符号“-”处理的问题,但当时没有注意如果只是“147258369” 则匹配失效 !
$model = "ABCD-147258369x"    ;V  /   X   /   -X   /  -V  /  " 空 " 格式化字符串后的五种可能,五种可能另需要区别出 X / V  !
MsgBox(4096,"Debug",StringRegExp(stringreplace(StringLower($Model),"-",""),"147258369[(?s)x]")=1 ? "Okay" : "失效了")
;Stringreplace($model,"-","") ;删去所有 "-" 。
--------------------------------------------------------------------------------------------------------------------------------------------------
发表于 2014-12-28 12:45:29 | 显示全部楼层
本帖最后由 半芯竹 于 2014-12-28 13:23 编辑

#include<array.au3>
Local $a='ABCD-147258369x.lst  ABCD-147258369-x.lst ABCD-147258369-v.lst ABCD-147258369v.lst ABCD-147258369.lst'
Local $b=StringRegExp($a,"\d{9}-?x",3)
If Not @error Then _ArrayDisplay($b)

以上均表示匹配带有X结尾的,不管带不带"-" ..均匹配.
#include<array.au3>
Local $a='ABCD-147258369x.lst  ABCD-147258369-x.lst ABCD-147258369-v.lst ABCD-147258369v.lst ABCD-147258369.lst'
Local $b=StringRegExp($a,"\d{9}-?v",3)
If Not @error Then _ArrayDisplay($b)

以上均表示匹配带有v结尾的,不管带不带"-" ..均匹配.
#include<array.au3>
Local $a='ABCD-147258369x.lst  ABCD-147258369-x.lst ABCD-147258369-v.lst ABCD-147258369v.lst ABCD-147258369.lst'
Local $b=StringRegExp($a,"\d{9}-?\w?",3)
If Not @error Then _ArrayDisplay($b)

以上均表示匹配所有的版本.
#include<array.au3>
Local $a='ABCD-147258369x.lst  ABCD-147258369-x.lst ABCD-147258369-v.lst ABCD-147258369v.lst ABCD-147258369.lst'
Local $b=StringRegExp($a,"(\d{9})\.",3)
If Not @error Then _ArrayDisplay($b)

以上表示,只取纯数字版本.带X|V|-X|-V 等版本均不匹配
可能我不是很理解您所想要表达的东西..我不知道你想要的是不是这样的效果?
 楼主| 发表于 2014-12-28 13:26:36 | 显示全部楼层

标题

回复 2# 半芯竹

谢谢半心竹提供的思路,看起来应该是的,现在手机了不方便测试。刚脑子一冒烟,把字符串"-"替换为""之后好像可以达到预期效果了。呵呵,自己的办法显得有点拼凑,在这里和大家交流很愉快
 楼主| 发表于 2014-12-28 13:34:00 | 显示全部楼层

标题

回复 2# 半芯竹
    这好像正则!!学习了,回去慢慢研究
发表于 2014-12-28 13:35:47 | 显示全部楼层
回复 4# Huiseyu


    晕,这不是像正则,这确实就是正则...
正则的效率要高不少的...
 楼主| 发表于 2014-12-28 16:33:40 | 显示全部楼层
本帖最后由 Huiseyu 于 2014-12-28 16:36 编辑

回复 2# 半芯竹

也就是说让程序在以下一堆文件中找到关键词“147258369x”,用来像人一样区分不同文件和版本,“X”,“V”表示版本,终于一口气说出来了。呵呵
ABCD-147258369x.lst
ABCD-147258369-x.lst
ABCD-147258369-v.lst
ABCD-147258369v.lst
ABCD-147258369.lst

哦对了,有的文件没有版本,如“147258369.lst” ,不需要版本。但是仍然要能够匹配。

我好纠结啊啊。。
发表于 2014-12-28 16:38:18 | 显示全部楼层
回复 6# Huiseyu


   
#include<array.au3>
Local $a='ABCD-147258369x.lst  ABCD-147258369-x.lst ABCD-147258369-v.lst ABCD-147258369v.lst ABCD-147258369.lst'
Local $b=StringRegExp($a,"\d{9}x",3)
If Not @error Then _ArrayDisplay($b)

这样能解决您的问题了吗?只匹配带X的.带"-"的都不匹配...
 楼主| 发表于 2014-12-28 16:39:43 | 显示全部楼层
回复 6# Huiseyu


    我正在研究你的代码,
发表于 2014-12-28 16:42:46 | 显示全部楼层
回复 6# Huiseyu


    我还是不太理解你说的,到底是只匹配"147258369X",还是连纯数字的版本也要匹配?,还是'-X''-V'之类的都要匹配
 楼主| 发表于 2014-12-28 16:45:38 | 显示全部楼层
回复 9# 半芯竹

需要整理一下,我自己都玩晕了。 不好意思。 非常感谢。 我尽量从你的代码中找到答案。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-4 01:51 , Processed in 0.079259 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表