Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 读取带符号(+;和-)的文件名_Python_Regex_Special Characters_Readfile - Fatal编程技术网

Python 读取带符号(+;和-)的文件名

Python 读取带符号(+;和-)的文件名,python,regex,special-characters,readfile,Python,Regex,Special Characters,Readfile,我有一个代码,可以通过以下行扫描文件夹中的文件名: 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

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

  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+])?

因此您正在尝试匹配表单的所有字符
Tdigits
,然后可能匹配其他字符,直到
.txt
。所以只要把它作为正则表达式匹配就行了

fileNum = re.findall(r'^T\d+.+\.txt',inputName)

因此,您试图匹配表单
Tdigits
中的所有字符,然后可能匹配其他字符,直到
.txt
。所以只要把它作为正则表达式匹配就行了

fileNum = re.findall(r'^T\d+.+\.txt',inputName)

您当前的常规表达式将匹配每个输入字符串。你忘了遮住点,所以你会接受每个角色

要接受字符
T
B
0
1
,[…],
9
+
-
,需要使用以下正则表达式:

^T[\dB\._+-]+\.txt$
^T13_B[\d\.+-]+\.txt$
但是,正如在本例中需要的注释中所指出的,Reza是另一个正则表达式:

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

此文件接受所有文件,前缀为
T13\u B
,后跟任何数字、点、加号和减号以及后缀
.txt

您当前的常规支出将匹配每个输入字符串。你忘了遮住点,所以你会接受每个角色

要接受字符
T
B
0
1
,[…],
9
+
-
,需要使用以下正则表达式:

^T[\dB\._+-]+\.txt$
^T13_B[\d\.+-]+\.txt$
但是,正如在本例中需要的注释中所指出的,Reza是另一个正则表达式:

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

此文件接受所有文件,前缀为
T13\u B
,后跟任何数字、点、加号和减号以及后缀
.txt

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

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

谢谢,看起来很接近。但是我没有得到确切的形式:T13_B[\d+-].txt(这不完全是您的命令,因为它在本例中也不起作用)在那里,您需要再次屏蔽点,并且您错过了允许多个字符的加号:
T13_B[\d+-]+\.txt
很好,只有一件事:\d仅适用于整数或例如13.4?事实上,我一直使用一位数字的格式。\d是0-9的别名,所以它有点像int。为了支持这个小数点,你需要添加一个蒙面点:[\d\.+-]我不同意给定的regex
^T[\dB\.\u+-]+\.txt$
,因为它匹配任何以T开头,后跟一个或多个数字的文件名,字母“B”以任何顺序下划线或加号/减号。此匹配(例如TBBBBB.txt与)显然没有所需的格式。顺便说一句,当圆点出现在一组字符中时,它不必受到保护。
[.]
。谢谢,看起来很接近。但是我没有得到确切的形式:T13_B[\d+-].txt(这不完全是您的命令,因为它在本例中也不起作用)在那里,您需要再次屏蔽点,并且您错过了允许多个字符的加号:
T13_B[\d+-]+\.txt
很好,只有一件事:\d仅适用于整数或例如13.4?事实上,我一直使用一位数字的格式。\d是0-9的别名,所以它有点像int。为了支持这个小数点,你需要添加一个蒙面点:[\d\.+-]我不同意给定的regex
^T[\dB\.\u+-]+\.txt$
,因为它匹配任何以T开头,后跟一个或多个数字的文件名,字母“B”以任何顺序下划线或加号/减号。此匹配(例如TBBBBB.txt与)显然没有所需的格式。顺便说一句,当点出现在一组字符中时,它不必受到保护。
[.]
。似乎有许多不同的文件名格式需要匹配。值得注意的是,在代码< > B B/<代码>变化(根据您的示例,在B之后可选的符号,可选的<代码>数字-/代码>在最后-和/或在中间)取决于目录的内容,如果不存在混淆的风险,难道<代码> ^ T++.txt < /Cord>简单地做这个把戏吗?否则,请用所有不同变体的完整列表编辑您的问题,以便我们提供真正匹配的正则表达式。似乎有许多不同的文件名格式需要匹配。值得注意的是,在代码< > B B/<代码>变化(根据您的示例,在B之后可选的符号,可选的<代码>数字-/代码>在最后-和/或在中间)取决于目录的内容,如果不存在混淆的风险,难道<代码> ^ T++.txt < /Cord>简单地做这个把戏吗?否则,请用所有不同变体的完整列表编辑您的问题,以便我们提供真正匹配的正则表达式。