在python中执行string.startswith()时如何忽略数字?

在python中执行string.startswith()时如何忽略数字?,python,Python,我有一个包含大量文件的目录。文件名类似于以下内容:(number)one(number),其中(number)可以是任何数字。还有一些文件名为:(number),其中(number)可以是任何数字。我想知道如何在文件名末尾加上“一(数字)”来计算文件的数量 假设我有一个文件名列表,我正在考虑 for n in list: if n.startswith(the(number)one): add one to a counter 在进行StartWith时,它是否可以接受

我有一个包含大量文件的目录。文件名类似于以下内容:(number)one(number),其中(number)可以是任何数字。还有一些文件名为:(number),其中(number)可以是任何数字。我想知道如何在文件名末尾加上“一(数字)”来计算文件的数量

假设我有一个文件名列表,我正在考虑

for n in list:
    if n.startswith(the(number)one):
        add one to a counter
在进行StartWith时,它是否可以接受(数字)空间中的任何数字

例如: 34ONE 5 37人2 444ONE3 第87页第8页 34 32


这应该返回4。

最简单的方法可能是:


请注意,
*
此处将匹配任何字符串,而不仅仅是数字。

使用与模块中的“one\d+”匹配的正则表达式

如果您想使其非常准确,您甚至可以:

for n in list:
    if re.search(r"^the\d+one\d+$", n):
        add one to a counter
它甚至会处理“the”和“one”之间任何可能的非数字字符,并且不允许在“the”之前和最后一个数字之后使用任何其他字符

您现在应该开始学习regexp:

  • 它们可以让你在眨眼之间进行一些复杂的文本分析,而手动编写代码是很困难的
  • 从一种语言到另一种语言,它们的工作原理几乎相同,使您更加灵活
  • 如果你遇到一些使用它们的代码,如果你没有,你会感到困惑,因为这不是你能猜到的
  • 你越早了解它们,你就越早学会不使用它们。这最终和了解他们一样重要

与单行程序相同,并回答问题,因为它也应与“The”匹配:

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

这很聪明,但是如果任何不是数字的字符在“the”和“one”之间,它就会失败。
glob.glob()
将匹配当前工作目录中的文件。你的意思是
fnmatch.fnmatch()
@Thomas:不,我不是说
fnmatch.fnmatch()
,因为
glob.glob()
在这里更容易使用。感谢您指出目录中的问题@e-satis:如果
one
之间有一个非数字字符,我不知道你的答案会有什么不同。我认为正则表达式应该是“one\d+$”,因为OP指定他要在文件名的末尾匹配“one(number)”,或者可能是一个完整的正则表达式“the\d+one\d+”并使用
match()
而不是
search()
。您是对的,我添加了第二个示例,该示例具有更精确的匹配。
for n in list:
    if re.search(r"^the\d+one\d+$", n):
        add one to a counter
import re
count = len([name for name in list if re.match('the\d+one', name)])