正则表达式:如何匹配两个字符但排除某个组合

时间:2013-08-06 13:45:58

标签: python regex

我需要这个正则表达式的帮助。我有许多文件名,格式为:

DataFile_en.dat
DataFile_de.dat
DataFile_es.dat

是DateFile_,后跟两个字符的语言代码。

我想编写一个正则表达式,该表达式匹配具有此模式的所有文件名但不包括英文名称(DataFile_en.dat)

我有这个模式来提取所有文件:

DataFile_\w{2}.dat

但我不知道如何编写模式以排除带有'en'作为语言代码的模式。正则表达式将在Python中使用。

3 个答案:

答案 0 :(得分:8)

您可以使用否定前瞻。您可以找到有关here的更多信息。从本质上讲,它“向前看”并确保括号中的正则表达式不匹配。

DataFile_(?!en)\w{2}\.dat

请注意,您应该转义该期间,因为它会匹配任何字符。

答案 1 :(得分:6)

您可以使用否定前瞻。 (?!something)表示“失败,除非您可以避免匹配某些内容”。

DataFile_(?!en)\w{2}\.dat

答案 2 :(得分:1)

一种可能性是使用DataFile_(([^e].)|e[^n])).dat,这仍然在正则表达式的经典“常规语言”限制范围内,但代价是可读性。