python的特性注定了代码无法保密_被python的这个“特性”给坑死了

原标题:被python的这个“特性”给坑死了

哈哈哈,被自己蠢死了,也被 python 的语法给坑死了。没想到还会遇到这种问题。

事情是这样的。

项目中遇到一个字符串替换的问题。

我们知道字符串替换可以直接用replace方法,但这个方法只适合简单的字符替换,就是前提你要明确知道你要替换什么。

例如把“java”去掉

s = "java python"

print(s.replace( "java", "")) # python

遇到复杂场景就不得不用正则表达式的方法来替换了。

比如有一段html文本

s = """

< >

! function(e)

w3i9df

xxx

>

< div>这是html文本 div>

"""

我想把脚本去掉,只保留html文本。这时候可以正则表达式里面的 re.sub 方法来实现。

importre

s = """

<>

!function(e)

w3i9df

xxx

>

这是html文本

"""

result=re.sub( r"<.>", "", s)

print(result)

运行后发现还是原来的文本,是我的正则表达式写的不对么?

其实这是因为,字符串中有换行符, 但是 . 是无法匹配换行符等特殊符号的,这时需要一个标志参数叫 re.DOTALL , 它可以让正则表达式中的点(.)匹配包括换行符在内的任意字符。

importre

s = """

<>

!function(e)

w3i9df

xxx

>

这是html文本

"""

result=re.sub( r"<.>", "", s, re.DOTALL)

print(result)

于是我加上了标志参数,发现还是没法匹配。我就很郁闷了。尝试好几次都没效果。

作罢,然后去看了文档。

原来这个函数有两个可选的位置参数,平时没注意过。count 表示替换的最大次数。flags 才是标志参数。

在调用时,如果指定参数名字时

result=re.sub( r"<.>", "", s, re.DOTALL)

那么 re.DOTALL 就会作为 count 参数的值传过去了,等于你并没有给 flags 指定值,用的还是默认的值。

所以,在调用的时候,一定要显示的指定参数名。

result=re.sub( r"<.>", "", s, flags = re.DOTALL)

这样就能正常匹配表达式了。

最后的结果就是:

< div>这是html文本 div>

python的函数参数是一个很迷的问题,如果要把函数的参数使用全部讲清楚,可以花很多篇幅来讲。今天快速记录下这个问题,也是告诉大家遇到类似的问题时,别掉坑里面了。返回搜狐,查看更多

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值