我尝试了以下代码
import re
regobj = re.compile(r"^.+\.(oth|xyz)$")
for test in ["text.txt", "other.oth", "abc.xyz"]:
if regobj.match(test):
print("Method 1:", test)
regobj = re.compile(r"^.+\.[^txt]$")
for test in ["text.txt", "other.oth", "abc.xyz"]:
if regobj.match(test):
print("Method 2:", test)
我希望第二种方法能找到任何没有扩展名txt
的文件,但我尝试的方法并不好。我做错什么了
正如Martijn Pieters提到的
regex
是过度杀戮,考虑到还有其他更有效的方法:使用
splitext
隔离扩展非常简单您可以很容易地添加一个
else
语句来匹配其他扩展,这由您决定正则表达式在这里是多余的。使用^{} method :
正则表达式使用负字符类,它是不应匹配的字符集。任何不是
t
或x
的东西都将满足该测试。您可以显式地匹配.txt
,并使用not
来排除而不是包含:如果您只能使用正则表达式,请使用否定的前瞻断言
这里
(?!...)
只匹配后面一直到字符串末尾没有文字txt
的位置。然后[^.]+
匹配任何数量的非.
字符,直到字符串结束将第二个正则表达式改为
[^txt]
匹配任何不属于t
或x
的字符(?!txt$)
断言点后面不会跟txt
。在\.
之后的[^.]+
断言在点之后必须至少存在一个字符。因此它匹配具有任何扩展名但不具有.txt
的文件名相关问题 更多 >
编程相关推荐