【问题标题】:How to format f-strings with regex expressions?如何使用正则表达式格式化 f 字符串?
【发布时间】:2018-12-20 20:03:22
【问题描述】:

我有一些字符串最初与加号连接并包含正则表达式字符串。这是一个例子:

"Level 4: " + re.sub(r"(\w)([A-Z])", r"\1 \2", talents[1]) + "\n\n"

但是,我一直想使用更正确的格式。我对 f-strings 做了一些研究,我想在这里使用它们。我是这样尝试的:

f'Level 4: {re.sub(r"(\w)([A-Z])", r"\1 \2", talents[1])} \n\n'

但是,我的编辑对我咆哮着说有反斜杠的表达式片段。在这种情况下,f-strings 不是适合这项工作的工具吗?

编辑: 根据@jwodder 的要求,这是我从 Python 得到的错误(我在 3.6 上)

SyntaxError: f-string expression part cannot include a backslash

【问题讨论】:

  • 谁在乎你的文本编辑器是否在抱怨? Python 在抱怨吗?
  • 你可以使用 f-strings,并不意味着你必须。特别是使用正则表达式时,将匹配和格式化的关注点分离到不同的行可能更具可读性。

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


【解决方案1】:

您不能在 f 字符串中插入带有反斜杠的表达式,当前为 a restriction by design。你可以把它分成两个语句:

subst = re.sub(r"(\w)([A-Z])", r"\1 \2", talents[1])
msg = f'Level 4: {subst} \n\n'

(旁注:目前有一个提议(PEP 536)放宽这种限制以使原始代码按预期工作,但尚未被接受或实施。)

【讨论】:

    猜你喜欢
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 2021-10-10
    相关资源
    最近更新 更多