【问题标题】:Regex: How to match two character but exclude a certain combination正则表达式:如何匹配两个字符但排除某个组合
【发布时间】:2013-08-07 13:38:45
【问题描述】:

我需要有关此正则表达式的帮助。我有许多文件名,格式如下:

DataFile_en.dat
DataFile_de.dat
DataFile_es.dat

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

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

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

DataFile_\w{2}.dat

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

【问题讨论】:

  • DataFile_([^e].|e[^n])\.dat
  • DataFile 只是一个例子还是它总是同名?如果是,则不需要正则表达式:filter(lambda x: x[9:11] != 'en', filelist),或类似的。

标签: python regex


【解决方案1】:

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

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

请注意,您应该转义该句点,因为它将匹配任何字符。

【讨论】:

  • 这段时间很好:-)
【解决方案2】:

您可以使用负前瞻。 (?!something) 的意思是“失败,除非你能避免匹配 something”。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-11
      • 1970-01-01
      • 2014-06-05
      • 2011-03-01
      相关资源
      最近更新 更多