python replace 正则替换_按键精灵脚本开发之如何处理字符串事半功倍-正则表达式的应用...

有人说,正则的用处太少了,大部分的事情,其实字符串函数就够用了。

我真不打算辩解,我认为VCKBASE上有一个文章说得很对,正则表达式 是未来绝不会失业的技术中的一种。

再说个近点的例子,大漠插件,假如你开发过图色插件,如果你要找一个图,你去循环搞几百万次判断,我只能说你太笨了,如果你懂得用字符串函数,那么你比较聪明了,如果你懂得用正则来匹配,撇开语言和正则库不说,那么你的插件的效率就可以赶上大漠了。

5ae65e9622eb28b4f33c249005481fb1.png

关于正则表达式,我也会发专题说明,不明白的可以持续关注我.可以先查询一下.

当然你也可以直接看这个教程,我想,这个帖子的难度不算太高。因为VBS的正则库运用起来实际上很简单。

正则库虽然简单了,但是正则表达式却不简单,我认为它很绕人,因此,我是强烈建议把VBS的字符串函数玩到火候了,再来看正则。当然,在这里,我会以实际的例子来说明正则表达式的方便之处,然后才告诉你什么符号代表什么意思,所以,只要你有那么点耐心,你肯定是能学会的。

b52ef3b23b68cff12be3adc6707dd91e.png

说到例子了,来吧,还是举例来说明。

给你一个字符串

str = "38snd0d92hellop1s5gworld"

我要让你取出d92之后的内容取出的字符到p1s5g的前一个字符为止,然后取出p1s5g后的所有字符串直到结束,最后把取出的两个字符串合并为一个字符串,并且中间加一个空格。

好了,你凭肉眼看,你知道我要让你把hello world取出来,但是假如有1000个字符,10000个字符,你还要看么?

先来一段VBS的代码,我不会太详细的说明VBS的例子,当然方法有很多,字符串函数很灵活,我只是随手一写,写出来和正则对照字符串函数有多麻烦,你们不要看我的代码把自己看傻了。

Dim str, in1, in2, l1, l2, r1, r2

str = "38snd0d92hellop1s5gworld"

'先找出"d92"的和"p1s5g"的位置,长度也整出来。

in1 = Instr(str, "d92")

in2 = Instr(str, "p1s5g")

l1 = Len("d92")

l2 = Len("p1s5g")

'然后Mid函数就可以开工了

r1 = Mid(str, in1 + l1, in2 - in1 - l1)

r2 = Mid(str, in2 + l2, len(str) - in2 - l2 + 1)

'最后把取出的r1和r2合并一下,大功告成

ret = r1 & " " & r2

MsgBox ret

下面就是正则的代码了

str = "38snd0d92hellop1s5gworld"

Dim regEx, Matches '声明一下要用到的两个玩意

set regEx = New RegExp '新建一个正则对象

regEx.Pattern = ".+d92|p1s5g" '正则表达式

regEx.Global = true '全局可用性

regEx.IgnoreCase = false '区分大小写

Set Matches = regEx.Execute(str) 'Execute方法,在按键的VBS命令里有过介绍的,就是将正则匹配搜索到的字符串放进一个数组里,没有多高明。

str = Replace(str, Matches(0), "")'替换搜索到的第一个字符串为空字符

str = Replace(str, Matches(1), " ")'替换搜索到的第二个字符串为一个空格

MsgBox str

下面,主要来说说,Pattenrn属性,也就是正则表达式了。

你可以看到regEx.Pattern = ".+d92|p1s5g"

其中的 . 匹配除了换行符之外的任意字符

其中的 + 匹配前面的表达式多次

d92 就是我给出的条件1

其中的 | 是将.+92与p1s5g分开匹配的符号,也就是,我同时要去匹配多个字符串时,匹配每一个不同的字符串,都要用 | 来分开。

最后的p1s5g就是我给出的条件2

整个正则表达式,我用中文来解说出来吧,希望这样能方便你理解。

搜索开始位置的任意字符直到d92结束 和 搜索整个字符串中为p1s5g的字符串

开始位置的任意字符到d92结束 为 "38snd0d92"

p1s5g就是匹配他自己了。

执行Excute方法后,就按先后顺序把搜索到的字符串放进数组了。

既然数组里有我们要的东西了,那么,就可以用replace来进行替换原有的字符串了。

现在我们对比一下,和VBS的字符串函数相比,正则表达式去匹配这个字符串完成工作省了多少事。

VBS用字符串函数一共进行了2次查找,我想不管你用什么办法,2次查找都是不可避免的,然后进行了2次Mid获取函数,最后又操作了一次字符串合并。

假如你要处理的是一个很复杂的字符串,比如我接下来要讲到的例子。采集网页源码。那么你用字符串函数,还需要去注意看位置,要经过多次调试,你才能得到你想要的东西。

而正则表达式,通过一次性的匹配,通过2次replcae,就完成了我们所需要干的事了,如果你想说,VBS字符串函数同样可以通过replace来进行操作,那么我可以告诉你,不管你如何操作,2次查找你是避免不了的,假如我给出的条件是n个,那么你就会杯具的发现,查找的次数就是n了,而正则表达式,无论我给出多少个条件,永远可以通过较少次数的匹配,多次替换函数,来获取到我需要的字符串。

好了,我们接着来继续吧,我接下来要举的实际例子,比如一个用户资料来作为例子。

既然是要取出他的资料,首先我们需要获取网页源码,获取网页源码的命令库已经有了,也不用我再写了。

然后,我们需要通过观察网页源码来写正则表达式,右键-查看网页源文件,就可以看到了。

还是先上代码吧。

  1. str = lib.网络.获得网页源文件("http://bbs.vrbrothers.com/forum.php?mod=viewthread&tid=285465&page=1&extra=#pid3355356")
  2. Dim regEx, Matches, Match
  3. set regEx = New RegExp
  4. regEx.Pattern = "<.>
  5. 606406"
  6. regEx.Global = true
  7. regEx.IgnoreCase = false
  8. Set Matches = regEx.Execute(str)
  9. str = Matches(0)
  10. regEx.Pattern = "<. chr>||[a-z]+>||UID|606406"
  11. Set Matches2 = regEx.Execute(str)
  12. For Each Match In Matches2
  13. If Match = "" Then
  14. str = Replace(str, Match, vbCrLf)
  15. Else
  16. str = Replace(str, Match, "")
  17. End If
  18. Next
  19. MsgBox str
9802677cd2c2aa26eaa72f5aea96dd72.png

金猪脚本(原飞猪脚本)以按键精灵教学为主,涉及UiBot,Python,Lua等脚本编程语言,教学包括全自动办公脚本,游戏辅助脚本,引流脚本,网页脚本,安卓脚本,IOS脚本,注册脚本,点赞脚本,阅读脚本以及网赚脚本等各个领域。想学习按键精灵的朋友可以添加金猪脚本粉丝交流群:554127455 学习路上不再孤单,金猪脚本伴你一同成长.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值