【问题标题】:Python3 f-strings: how to avoid having to escape literal curly brackets?Python3 f-strings:如何避免转义大括号?
【发布时间】:2020-11-28 13:42:03
【问题描述】:

有没有办法避免在 python3 f-string 中转义大括号字符?

例如,如果你想输出一个 json 字符串或一大块 CSS 规则,那么必须将所有 {} 字符转换为 {{}} 以防万一你想使用真的很不方便f-string 语法。

我知道可以使用较旧的语法,例如div {color: %s} % color'text {}'.format(abc)string templates 但我想知道是否有办法在原始文本上使用 f 字符串,最好是通过某种方式来标记“原始”块的开头和结尾分隔符,例如类似于您如何使用 \Q\E in a java regex 在正则表达式中包含未转义的原始字符。

作为替代方案,标准库中是否有允许获取大量原始文本并将其转换为 f-string-safe 格式的东西? (同样,类似于您如何将Pattern.quote 用于 java 正则表达式)

【问题讨论】:

    标签: python-3.x escaping f-string


    【解决方案1】:

    可以使用implicit string concatenation 将 f 字符串格式应用于字符串的一部分。

    [...] 另请注意,文字连接可以为每个组件使用不同的引用样式(甚至混合原始字符串和三引号字符串),并且格式化的字符串文字可以与普通字符串文字连接 .

    >>> hello = "world"
    >>> "{hello}" f"{hello}" "!"
    '{hello}world!'
    

    这使用与带有转义的相应 f 字符串完全相同的字节码。 请注意,空格是可选的,但有助于提高可读性。

    【讨论】:

    • 接受作为一种功能性解决方法;真的很整洁!谢谢!
    • 输出实际上应该是'{hello}world!',不是吗?
    • @ccpizza 糟糕,感谢您指出这一点。是的,输出是'{hello}world!'
    【解决方案2】:

    在python中有三种方式可以操作字符串。

    1. 使用 f 字符串
    2. 使用 str.format 表达式
    3. %-格式化表达式

    请参考this link

    如果你愿意,你可以制作自己的自定义函数并调用它。

    def format_string(data,template):
        for key, value in data.items():
        return template.replace("#%s#" % key, str(value))
        
        
    template ="<html><body>name is :#name# , profession is :#profession#<body></html>"
    data ={"name":"Jack","profession":"student"}    
    format_string(data,template)
    

    【讨论】:

    • 我熟悉现有的格式化方法。问题具体是关于启用/禁用特定块的 f-string 魔术的方法 ootb 使任何文本“f-string”安全的方法。
    猜你喜欢
    • 2015-05-25
    • 2017-07-20
    • 2018-04-26
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    相关资源
    最近更新 更多