找回密码
 加入
搜索
查看: 2142|回复: 2

[AU3基础] [已解决]多关键字排除正则案例

[复制链接]
发表于 2011-10-12 22:26:01 | 显示全部楼层 |阅读模式
本帖最后由 elexy 于 2011-10-13 15:10 编辑

需求:每台打印机后面的 | 为分隔符。只认出本机安装的真实打印机,网络共享来的及虚拟的都不要。

规律: 排除包含以下四种关键字的字段以及后面的 | 分隔符   1. Microsoft  2. PDF  3. fax  4. \\    不区分大小写,目前已知这四种,最好是开放式的,以后能修改或添加关键字。

案例模拟结果:提取出来   EPSON LQ680K|Canon IP1800|    即可。

Local $str = "EPSON LQ680K|Microsoft XPS Document Writer|Fax|Microsoft Office Document Image Writer|Foxit PDF|\\192.168.1.2\hp6L|Canon IP1800|"
发表于 2011-10-13 00:53:44 | 显示全部楼层
#include <Array.au3>
Local $Str = 'EPSON LQ680K|Microsoft XPS Document Writer|Fax|Microsoft Office Document Image Writer|Foxit PDF|\\192.168.1.2\hp6L|Canon IP1800|' & @CRLF
;MsgBox(0, '原字符串', $Str)
Local $pc = 'Microsoft|PDF|fax|\\\\' ;可继续加入其它排除字符
Local $Test = StringRegExp($str, '(?i)(?<=^|\|)(?:(?!' & $pc & ').)+?(?=\|)', 3)
_ArrayDisplay($Test, UBound($Test))
发表于 2011-10-13 01:18:49 | 显示全部楼层
如果直接要 “EPSON LQ680K|Canon IP1800|” 这个结果就用替换模式~
Local $Str = 'EPSON LQ680K|Microsoft XPS Document Writer|Fax|Microsoft Office Document Image Writer|Foxit PDF|\\192.168.1.2\hp6L|Canon IP1800|'
;MsgBox(0, '原字符串', $Str)
$pc = 'Microsoft|PDF|fax|\\\\'
Local $Test = StringRegExpReplace($str, '(?i)[^\|]*?(?:' & $pc & ')[^\|]*?\|', '')
MsgBox(0, '替换结果', $Test)
发表于 2011-10-13 01:46:37 | 显示全部楼层
回复 3# afan
afan版主的正则真是太厉害了,佩服得不行了!
 楼主| 发表于 2011-10-13 15:09:14 | 显示全部楼层
afan第一种方法包头,牵涉数组,不太精简,第二种方法非常好!!!谢谢!!!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-6 09:28 , Processed in 0.076433 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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