欢迎使用6miu-markdown编辑器

    xiaoxiao2021-03-25  62

    正则获取脚本中的字符串


    在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了

    转载请注明原文地址: https://ju.6miu.com/read-38149.html

    最新回复(0)