【问题标题】:Can string formatting be used only in print() function and statements in Python?字符串格式只能在 Python 中的 print() 函数和语句中使用吗?
【发布时间】:2014-12-09 06:31:53
【问题描述】:
iterator, i is "Roster ID 2006 has been deleted"

  if re.match("Roster ID 2006 has been deleted",  i): //works

  if re.match("Roster ID %s has been deleted" % i,  i): //does not seem to work

除了打印函数和打印语句之外,我不能在其他任何地方使用字符串格式吗?

【问题讨论】:

  • 我怀疑如果您在代码中尝试print "Roster ID %s has been deleted" % i,它也不会达到您的预期。打印出来看看你会得到什么。
  • 那我可以还是不可以?
  • 你可以。你只是做错了。
  • 在这种情况下您真的尝试 print吗?然后你就看到了真正的问题......

标签: python string search formatting match


【解决方案1】:

是的,您可以在打印之外使用字符串格式。您的示例不起作用,因为 i 是您要查找的字符串。应该是一年,例如2006

i = "Roster ID 2006 has been deleted"
print(re.match("Roster ID 2006 has been deleted",  i))
print(re.match("Roster ID %d has been deleted" % 2006,  i))

在这两种情况下,我们都会得到以下结果:

<_sre.SRE_Match object; span=(0, 31), match='Roster ID 2006 has been deleted'>
<_sre.SRE_Match object; span=(0, 31), match='Roster ID 2006 has been deleted'>

但你正在这样做:

re.match("Roster ID %s has been deleted" % i,  i)

等同于:

re.match("Roster ID Roster ID 2006 has been deleted has been deleted",  i)
# thus you are getting None as a result of the match.

【讨论】:

    【解决方案2】:

    你可以;但是做"Roster ID %s has been deleted" % i 只会产生与另一行相同的东西 - 即"Roster ID 2006 has been deleted" - 如果i 是字符串"2006" 或转换为该字符串的东西。由于您的“工作”语句是if re.match("Roster ID 2006 has been deleted", i):,看来i 实际上是一些您希望包含"Roster ID 2006 has been deleted" 的长字符串。确保您的参数顺序正确:

    >>> help(re.match)
    Help on function match in module re:
    
    match(pattern, string, flags=0)
        Try to apply the pattern at the start of the string, returning
        a match object, or None if no match was found.
    

    【讨论】:

      猜你喜欢
      • 2014-12-14
      • 2017-04-02
      • 1970-01-01
      • 2015-05-13
      • 2012-10-28
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      • 2012-12-21
      相关资源
      最近更新 更多