用正则表达式替换 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#')
给定一个字符串:
#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#')