【问题标题】:Replace text around two tags in python with regex用正则表达式替换python中两个标签周围的文本
【发布时间】:2020-04-16 11:11:47
【问题描述】:

给定一个字符串:

#symbol 1# / 7 - #symbol 2#

我想回来:

func('#symbol 1#') / 7 - func('#symbol 2#')

我试过了:

re.sub('[#*#]', 'func(\'', f2)

给出:

func(symbol 1func( / 7 - func(symbol 2func(

我不希望 func(' 用于第二个哈希。

有没有办法使用re.sub 将哈希的结尾替换为')

【问题讨论】:

    标签: python regex replace python-re


    【解决方案1】:

    你可以使用像这样的正则表达式

    #[^\s#](?:[^#]*[^\s#])?#
    

    替换为func('\g<0>'),其中\g<0> 指的是整个匹配。请参阅regex demo

    详情

    • # - 一个 # 字符
    • [^\s#] - 除空格和 # 以外的字符
    • (?:[^#]*[^\s#])? - 一个可选的非捕获组,匹配 1 次或 0 次
      • [^#]* - 除# 之外的 0 个或多个字符
      • [^\s#] - 除空格和 # 以外的字符
    • # - 一个 # 字符。

    Python demo

    import re
    text = '#symbol 1# / 7 - #symbol 2#'
    print( re.sub(r'#[^\s#](?:[^#]*[^\s#])?#', r"func('\g<0>')", text) )
    # => func('#symbol 1#') / 7 - func('#symbol 2#')
    

    【讨论】:

    • 您好,谢谢。作为一个小小的修正,我如何改变它来处理符号中的空格:'#symbol 1 like this# / 7 - #symbol 2 like that#'
    • @JDoe #[\w\s]+##[^#]+##[^\s#](?:[^#]*[^\s#])?#。这取决于分隔 #s 之间的规则。请在问题中添加要求,我将相应地修复正则表达式。
    • 谢谢 - 这为我节省了很多时间!
    猜你喜欢
    • 2020-06-11
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多