0

我有一个代码可以通过这一行扫描文件夹中的文件名:

  fileNum = re.findall(r'T([0.-999.])\.txt',inputName)

这可以正确读取我拥有的具有此类名称的文件:T12.txt、T13.3.txt。

现在我有一些文件在文件名中还包含特殊字符 + 和 -:T13_B+14.txt、T13_B-15.txt、T13_B0.0.txt 等(唯一的变量是带符号的 B 因子)。为了包含 + 符号作为阅读的特殊字符,我将这一行修改为:

  fileNum = re.findall(r'T13_B[\w+]([0.-99.])\.txt',inputName)

现在可以正确读取文件名中带有 + 的文件。所以我必须单独运行 + 和 - 。

问:如何在文件名中包含任何字符以供阅读(如此处 [\w+] )?

4

3 回答 3

1

因此,您正在尝试匹配表单的所有内容,Tdigits然后可能是其他字符,直到.txt. 所以只需将其匹配为正则表达式

fileNum = re.findall(r'^T\d+.+\.txt',inputName)
于 2013-06-11T19:53:00.243 回答
1

您当前的正则表达式将匹配每个输入字符串。你忘了掩盖这些点,所以你会接受每一个角色。

要接受 chars T, B, 0, 1, [...], 9, +, -_您需要使用以下正则表达式:

^T[\dB\._+-]+\.txt$

然而,正如 Reza 在这种情况下需要的评论中指出的那样,是另一个正则表达式:

^T13_B[\d\.+-]+\.txt$

这个接受所有以T13_B任何数字、点、加号和减号以及后缀为前缀和后跟的文件.txt

于 2013-06-11T19:54:45.107 回答
1

[0.-99.]不是你想的那样。它表示字符09.之一或范围内的一个.-9,即./0123456789. 要匹配一位或两位数字,请使用\d{1,2}\d\d?。要匹配\w字符 or+-使用[\w+-].

于 2013-06-11T20:03:43.113 回答