【问题标题】:String inside a string字符串内的字符串
【发布时间】:2010-10-17 18:45:36
【问题描述】:
BASE_URL = 'http://foobar.com?foo=%s'

variable = 'bar'

final_url = BASE_URL % (variable)

我得到这个'http://foobar.com?foo=bar' # 它忽略了内部字符串。

但我想要这样的东西'http://foobar.com?foo='bar''

感谢您的回答。

你能帮我解决几乎同样的问题吗:

lst = ['foo', 'bar', 'foo bar']

[str(l) for l in lst if ' ' in l] 

我得到了['foo bar'],但我希望它像[''foo bar'']一样

提前致谢。

【问题讨论】:

  • 为什么你一开始就绝对想要引号?
  • 实际上,我正在尝试使用 twitter search api 来获取与我的关键字相关的搜索结果。但是当搜索字符串中有空格时,它会询问它为foobar.com?q=foo+OR+bar+OR+'foo bar'
  • 嗯,好的 :-) 请始终写下为什么要从代码中获得某种行为。这使您更容易掌握整个问题:-)
  • ... 太快点击按钮:对于这个特殊问题,只需将引号添加到字符串中,但仍然让 urlencode 运行它,因为 URL 中没有“”(空格)字符: -)

标签: python string


【解决方案1】:

如果您使用 URL 参数,使用 urllib.urlencode 可能更安全:

import urllib

BASE_URL = 'http://foobar.com/?%s'
print BASE_URL % urllib.urlencode({
   'foo': 'bar',   
})

关于引号:您为什么明确想要它们?通常,您的 HTTP 包装器会为您处理所有这些。

关于您的第二个问题:如果您绝对还希望在其中包含引号,则在附加包含的字符串时仍然必须对其进行转义,或者(可能是更安全的方法)将使用 repr(.. .)

lst = ['foo', 'bar', 'foo bar']
lst2 = []

for l in lst:
    if ' ' in l:
        lst2.append(repr(l))

【讨论】:

    【解决方案2】:

    将您的 BASE_URL 更改为任一

    BASE_URL = "http://foobar.com?foo='%s'"
    

    BASE_URL = 'http://foobar.com?foo=\'%s\''
    

    【讨论】:

      【解决方案3】:

      看来,您对字符串字面量 的工作方式有些困惑。

      当您说s = 'this is a string' 时,您是在将一个字符串分配给一个变量。什么字符串?好吧,您在程序中硬编码的字符串文字。

      Python 使用撇号来表示字符串文字的开始和结束 - inside 中的任何内容都是字符串的内容。

      这可能是编程初学者的第一个难题:您在程序源代码中编写的内容与运行时实际发生的内容之间存在差异。您可能需要学习一些教程(我听说“深入 Python”非常好)。

      【讨论】:

        【解决方案4】:

        如果您希望单引号出现在 URL 中,您可以使用

        BASE_URL = 'http://foobar.com?foo=%s'
        variable  = "'bar'"
        final_url = BASE_URL % (variable)
        

        但如果变量来自某个地方(如用户输入),则此变体非常不安全。

        【讨论】:

          猜你喜欢
          • 2020-11-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-13
          • 1970-01-01
          • 1970-01-01
          • 2010-09-05
          相关资源
          最近更新 更多