用正则表达式替换 python 中两个标签周围的文本

Replace text around two tags in python with regex

给定一个字符串:

#symbol 1# / 7 - #symbol 2#

我想return:

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

我试过:

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

给出:

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

我不想要第二个哈希的 func('

有没有办法使用 re.sub 将散列的末尾替换为 ')

您可以使用像

这样的正则表达式
#[^\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#')