【问题标题】:Replace double quotes with single quotes between pairs of square brackets在方括号对之间用单引号替换双引号
【发布时间】:2021-10-02 12:24:23
【问题描述】:
a = """abcda"sd"asd["first", "last", "middle", "dob", "gender"]abcda"sd"asd"""
a = re.sub("\[(\".*?\",?)*\]", r'\g<0>'.replace('"', ""), a)
print(a)

我正在尝试替换提供的字符串中的双引号。 我用的方法对吗?

是否有另一种方法(首选单线)来获得所需的结果。

想要的字符串结果如下

"""abcda"sd"asd['first', 'last', 'middle', 'dob', 'gender']abcda"sd"asd"""

我只需要在方括号[]内替换双引号

【问题讨论】:

    标签: python-3.x regex string


    【解决方案1】:

    您可以在替换整个匹配项时从模式中省略捕获组。

    模式\[(\".*?\",?)*\] 也可以匹配末尾的,,并在双引号之间使用非贪婪匹配。

    您可能会做的是使用否定字符类[^"]* 来匹配双引号之间的所有字符,并可选择重复非捕获组(?:\s*,\s*"[^"]*")*,并以逗号开头,以不允许结尾有逗号。

    re.sub 可以使用 lambda,您也可以在其中替换双引号。

    import re
    
    a = """abcda"sd"asd["first", "last", "middle", "dob", "gender"]"""
    a = re.sub(r'\["[^"]*"(?:\s*,\s*"[^"]*")*', lambda m: m.group().replace('"', "'"), a)
    print(a)
    

    输出

    abcda"sd"asd['first', 'last', 'middle', 'dob', 'gender']
    

    【讨论】:

      【解决方案2】:

      您可以使用较新的regex 模块和\G,如下所示:

      (?:\G(?!\A)[^"\]\[]*|\[)\K"
      

      a demo on regex101.com


      Python而言,这可能是

      import regex as re
      
      text = """abcda"sd"asd["first", "last", "middle", "dob", "gender"]abcda"sd"asd"""
      pattern = re.compile(r'''(?:\G(?!\A)[^"\]\[]*|\[)\K"''')
      
      text = pattern.sub("'", text)
      
      print(text)
      

      并且会产生

      abcda"sd"asd['first', 'last', 'middle', 'dob', 'gender']abcda"sd"asd
      

      【讨论】:

        【解决方案3】:

        您可以使用方法replace。 a.replace('"', "'")

        【讨论】:

        • 我只想在 [] 内替换 qoutes
        猜你喜欢
        • 1970-01-01
        • 2021-08-12
        • 1970-01-01
        • 2018-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-23
        相关资源
        最近更新 更多