正则获取脚本中的字符串
在python中,字符串类型有'str'
,"str"
两种,注释有'''str'''
,"""str"""
,#str
三种
其中"str"
,'''str'''
,"""str"""
,#str
四种比较简单
NO.1 "str"
(?<!["\\])"(?!")[\s\S]*?(?<!["\\])"(?!")
NO.2 '''str'''
'''[\s\S]*?'''
NO.3 """str"""
"""[\s\S]*?"""
最简单的一条了
NO.4 #str
#.*?$
第二简单的一条
NO.5 'str'
重点到了,这条是最容易出问题的,弄了好多次
(?<!')'[\s\S]*?'(?!')
第一个版本和NO.1一样,但是有的会出现'Jack's code'
这样字符串中带's
和't
的句子,然后就出错了,然后有了下面的版本
(?<!')'(?![st])[\s\S]*?'(?!')
没错,又出问题了,当出现'stop'……'Jack's code'
时,又出错了,然后我就做了一个小小的变动,加了个空格
(?<!')'(?![st] )[\s\S]*?'(?!')
看似问题解决了,然而幸好我拿来测试的代码有将近10,000行,什么情况没有,然后又出问题了,'haha\'haha'
这里面发疯了,下一个版本
(?<!['\\])'(?![st] )[\s\S]*?(?<!\\)'(?!')
怎么样?看着没问题了吧,然后……看看下面的代码
'''
This is Donge666's
blog.
'''
tmd='tmd'
然后我疯了,然后又有了下面的版本
(?<!['\\])'(?!([st] )|([st]$))[\s\S]*?(?<!\\)'(?!')
然后献出我的10,000行代码来测试,没问题,反正我是不需要其他的了,至于最后一个不够精简?不要管那些了,对我这个菜鸟来说能实现功能就行了
自己的一点小发现
提出所有字符串,可以考虑先找出所有"""str"""
,然后在源字符串中将"""str"""
替换掉,然后依次找出并替换'''str'''
、"str"
、#str
、'str'
,然后就OK了