如何在Python中忽略数字进行字符串的startswith()判断?
我有一个文件夹,里面有很多文件。文件名的格式大致是这样的: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):
- 它们可以让你快速进行一些复杂的文本分析,这些是手动编码很难实现的。
- 在不同的编程语言中,它们的工作方式几乎是一样的,这样你会更加灵活。
- 如果你遇到一些使用正则表达式的代码,而你又不懂,就会感到困惑,因为这不是你能轻易猜到的。
- 越早了解它们,你就越早能学会什么时候不该使用它们(提示)。这和知道如何使用它们一样重要。