Python正则匹配 -- 匹配一个slash(反斜杠\)很不容易

背景

最后没能逃掉大创划水的结局,现在正在做的工作是把学到的方法写一个界面整合出来。

在界面显示哪些文件是相似度比较高的时候,需要根据前面的查重结果,找到一组一组的重复率高的文件。而之前的查重源码输出的格式是类似这样的:

.\test\1031170418_1_test1.s consists for 91 % of .\test\1032170222_1_work1.s material
.\test\1030415401_1_2333.s consists for 58 % of .\test\1030415629_1_LR.s material```

想要把重复率高的文件组成组,当然去源码里改是可以的,不过因为查重源码毕竟还是用的SIM,改他的输出格式比较麻烦,这里我就干脆根据他的输出文件,正则匹配出两两配对的文件,接下来建图求连通块就行了。

那么问题来了,面对这样的格式,正则匹配式要怎么写?

奥义:双重转义

就光是这里的正则匹配卡了我很久,这大概就是理论到时间的距离把——即使网课有讲过正则匹配,当时仍然没有想清楚匹配模式中的一个细节。通常,匹配模式中使用的字符串都会是原串,也就是r’字符串’的形式,而我之前的匹配式并没有用原串。当我考虑到了反斜杠需要写两次来进行匹配的时候,我对反斜杠的匹配是这样的:

re.complie('\\+')

没有结果。然后我就进行了花式尝试,加小括号加中括号。后来想到了待匹配串中应该是有两个slash,那么这里是不是应该用四个?用了四个果然对了,但是思路却并没有对。

真正的原因是,Python的字符串本身是会经历一次转义的,’\‘其实只是一个slash。而在re.compile的时候,字符串又会进行转义,所以,这里的’\+'经过两次转义之后,就变成了+,对,这个模式匹配的只是一个加号而已。

那么总结起来也非常简单,就是以后进行正则模式匹配的时候,都使用r’字符串’这样的原始字串,这样就只需要考虑一重转义就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值