首页 > 解决方案 > 使用完全匹配正则表达式时在 Python 中格式化原始字符串

问题描述

fr前缀可以组合fr标记。
但是当谈到正则表达式的完全匹配时,它似乎无法很好地格式化原始字符串:

import re

RE1 = r'123'
RE2 = re.compile(fr'@{3} {RE1}')

那么,RE2.pattern意志就变成了'@3 123'

但我想要的是'@{3} 123'

标签: pythonregexstring-formatting

解决方案


您必须转义围绕3这样的大括号,否则它们将被解释为字符串插值:

import re

RE1 = r'123'
RE2 = re.compile(fr'@{{3}} {RE1}')
print(RE2)

这会产生:

@{3} 123

参考:https ://www.python.org/dev/peps/pep-0498/

请注意,在结果字符串值中出现文字大括号的正确方法是将大括号加倍:

>>> f'{{ {4*10} }}'
'{ 40 }'
>>> f'{{{4*10}}}'
'{40}'

推荐阅读