【问题标题】:Find all upper,lower combinations of string in Python在Python中查找字符串的所有上下组合
【发布时间】:2017-04-18 13:43:18
【问题描述】:

我想在列表的每一行中搜索一个字符串,它将匹配每个可能的 UP/LOW 组合的情况

例如:如果我输入“all”,它会搜索“all”“All”ALL“aLL”“​​aLl”......等等。我认为它的工作方式类似于文本文档中的高级搜索。

更多细节:如果输入了'all',那么任何出现在该行中的字符串都将返回FOUNDED:'all', 'alL', 'All', 'ALL', 'aLL', 'aLl', 'AlL', 'ALl'

这是我如何找到正确的字符串

string = "all"
line[i].find(string)

如果 line 是 "ALL" ,则结果是 not found,所以这是一个限制。

【问题讨论】:

  • 你能把line[i]小写吗?看看有没有all
  • @depperm 是的,它会完成,但我必须保持数据的完整性,所以无论如何
  • 您可以创建一个副本并将副本小写并检查....
  • 您可以将行和搜索转换为相同的大小写:line[i].lower().find(string.lower())。它不会更改原始字符串,因为它们是不可变的。

标签: python string find


【解决方案1】:
>>> lines = ['All', 'ALL', 'all', 'WALL', 'BLAA', 'Balls']
>>> for line in lines:
...     if 'all' in line.lower():
...         print(line)


All
ALL
all
WALL
Balls

【讨论】:

  • 谁投了反对票,为什么?虽然不一定是最好的解决方案,但这是一个有效的解决方案
  • 当然可以使用理解:print([l for l in line if 'all' in l.lower()])
  • @depperm 我没有投反对票,但不鼓励仅使用代码的答案,而且搜索重复可能会更好
  • 但这是代码中的一个简单解决方案,没有任何额外内容。
  • 所以它只会找到小写字母,我也想以大写字母搜索,就像我输入“all”一样,该行是“ALL”但结果是“1 line found”或返回索引
【解决方案2】:

有几种方法可以实现这一目标。他们在这里:

1.更改您要搜索的字符串的大小写:

line[i].lower().find(string.lower())

line[i].upper().find(string.upper())

这里我们滥用了原始字符串的不变性,因为尽管我们将.upper() 应用于它们,但它们不会被更改,因为我们没有进行任何分配。

2。使用re 模块也会有所帮助:

import re
re.search('all', line[0], re.IGNORECASE)

re.search('(?i)all',line[0])

【讨论】:

  • 谢谢,IGNORCASE 正是我要找的。​​span>
  • 不客气!如果仍有不清楚的地方,请提出任何其他问题
【解决方案3】:

尝试使用列表理解,

In [25]: line = ['All', 'ALL', 'all', 'WALL', 'BLAA', 'Balls']

In [26]: [i for i in line if 'all' in i.lower() ]
Out[26]: ['All', 'ALL', 'all', 'WALL', 'Balls']

【讨论】:

    猜你喜欢
    • 2018-08-18
    • 1970-01-01
    • 2018-06-03
    • 2015-03-09
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    相关资源
    最近更新 更多