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

4
我可以帮你进行翻译。以下是涉及IT技术的内容,请参考:

我需要帮助解决这个正则表达式问题。我的文件名格式如下:

DataFile_en.dat
DataFile_de.dat
DataFile_es.dat

这是一个以两个字符的语言代码结尾的DateFile_。

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

我已经得到了提取所有文件的这个模式:

DataFile_\w{2}.dat

但我不知道如何编写排除使用 'en' 作为语言代码的模式。这个正则表达式将用于Python。


DataFile_([^e].|e[^n])\.dat - urzeit
数据文件(DataFile)只是一个示例还是总是相同的名称?如果是的话,您不需要正则表达式:filter(lambda x: x[9:11] != 'en', filelist)或类似的东西。 - Paulo Almeida
3个回答

9
你可以使用负前瞻。你可以在这里找到更多关于负前瞻的信息。本质上,它会“向前查看”,并确保圆括号中的正则表达式没有匹配。
DataFile_(?!en)\w{2}\.dat

请注意需要对句子中的句点进行转义,因为它将匹配任何字符。

好的,句号处理得很好 :-) - Brigand

6
你可以使用负向先行断言。(?!something)的意思是“除非你能避免匹配something”,否则将失败。
DataFile_(?!en)\w{2}\.dat

1
一种可能的方法是使用DataFile_(([^e].)|e[^n])).dat,这保持了正则表达式的经典“常规语言”限制,但牺牲了一些可读性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接