【问题标题】:unicode string equivalent of containUnicode 字符串等价于包含
【发布时间】:2015-06-09 23:54:48
【问题描述】:

尝试在 python 中使用包含时出现错误。

s = u"some utf8 words"
k = u"one utf8 word"

if s.contains(k):
    print "contains" 

我如何获得相同的结果?

普通 ASCII 字符串示例

s = "haha i am going home"
k = "haha"

if s.contains(k):
    print "contains"

我正在使用 python 2.7.x

【问题讨论】:

  • u'...' 对象不是 UTF-8 字。它们是 Unicode 对象,而 UTF-8 是表示 Unicode 值的编码数据。它类似于在屏幕上显示图像并将其编码为 PNG 或 JPEG 文件,或 datetime 对象并将此类对象编码为 ISO-8601 字符串。编码后的数据和值是相关的,但不是一回事。

标签: python string unicode


【解决方案1】:

ascii 和 utf8 字符串也一样:

if k in s:
    print "contains" 

在 ascii 或 uft8 字符串上都没有 contains()

>>> "strrtinggg".contains
AttributeError: 'str' object has no attribute 'contains'

您可以使用 findindex 代替 contains

if k.find(s) > -1:
    print "contains"

try:
    k.index(s)
except ValueError:
    pass  # ValueError: substring not found
else:
    print "contains"

当然,in 运算符是要走的路,它更优雅。

【讨论】:

  • 在尝试查找单个值时发现这很有用,但是如果我们想在列表中搜索任何值怎么办?使用包含我们将能够使用 '|'.join 但这不适用于 find
  • @EduardoPeFez 我无法理解您的意思。也许问一个新问题?
  • 让我们说你想看看'string'是否有子字符串'st'或'ae'。您可以使用 series.contains('ae|st') 执行此操作,然后字符串将返回 true,因为它包含 'st'。但是在 in 我们只能搜索 'st' 或 'ae' 但不能同时搜索两者
  • @EduardoPeFez 是的,为此您需要使用正则表达式,或者使用带有列表理解的anyany(substr in fullstr for substr in (‘ae’, ‘st’))
  • bool(re.search('(re)|(st)', fullstr))
【解决方案2】:

strunicode 没有区别。

print u"ábc" in u"some ábc"
print "abc" in "some abc"

基本一样。

【讨论】:

    【解决方案3】:

    字符串没有“包含”属性。

    s = "haha i am going home"
    s_new = s.split(' ')
    k = "haha"
    
    if k in s_new:
        print "contains"
    

    我猜你想实现这个

    【讨论】:

      【解决方案4】:

      测试字符串是否存在

      string = "Little bear likes beer"
      if "beer" in string:
          print("Little bear likes beer")
      else:
          print("Little bear is driving")
      

      【讨论】:

        猜你喜欢
        • 2015-04-22
        • 1970-01-01
        • 2020-12-19
        • 1970-01-01
        • 2019-01-29
        • 1970-01-01
        • 1970-01-01
        • 2011-03-31
        • 1970-01-01
        相关资源
        最近更新 更多