如何在Python中忽略数字进行字符串的startswith()判断?

0 投票
3 回答
542 浏览
提问于 2025-04-16 19:19

我有一个文件夹,里面有很多文件。文件名的格式大致是这样的:the(number)one(number),其中的(number)可以是任何数字。还有一些文件名是:the(number),同样的,(number)也可以是任何数字。我想知道怎么能统计出那些文件名后面带有“one(number)”的文件数量。

假设我已经有了文件名的列表,我在想可以这样做:

for n in list:
    if n.startswith(the(number)one):
        add one to a counter

有没有办法在使用startswith的时候,让它接受任何数字填在(number)的位置呢?

举个例子: the34one5 the37one2 the444one3 the87one8 the34 the32

这样的话,结果应该是4。

3 个回答

0

这段代码和一行代码的效果是一样的,同时也回答了问题,因为它会匹配到“the”这个词:

import re
count = len([name for name in list if re.match('the\d+one', name)])
0

最简单的方法可能就是用 glob.glob() 这个函数:

number = len(glob.glob("/path/to/files/the*one*"))

需要注意的是,这里的 * 可以匹配任何字符串,不仅仅是数字。

8

使用正则表达式来匹配 'one\d+',可以利用 re 模块。

import re
for n in list:
    if re.search(r"one\d+", n):
        add one to a counter

如果你想让匹配更加准确,甚至可以这样做:

for n in list:
    if re.search(r"^the\d+one\d+$", n):
        add one to a counter

这样做可以处理“the”和“one”之间可能出现的非数字字符,并且不会允许在“the”之前或最后一个数字之后有其他任何东西。

你现在就应该开始学习正则表达式(regexp):

  • 它们可以让你快速进行一些复杂的文本分析,这些是手动编码很难实现的。
  • 在不同的编程语言中,它们的工作方式几乎是一样的,这样你会更加灵活。
  • 如果你遇到一些使用正则表达式的代码,而你又不懂,就会感到困惑,因为这不是你能轻易猜到的。
  • 越早了解它们,你就越早能学会什么时候不该使用它们(提示)。这和知道如何使用它们一样重要。

撰写回答