Notepad++ REGEX:仅保留用点分隔的字符串中的最后 2 个子字符串

Notepad++ REGEX:仅保留用点分隔的字符串中的最后 2 个子字符串

字符串表示文件名,其中的字符子串以“.”分隔。每个字符串都有不同数量的子字符串,每个子字符串都可以是任何文本,除了最后一个子字符串,即文件扩展名。我只想保留最后一个子字符串 S1 和文件扩展名;例如:

我拥有的:

S4.S3.S2.S1.txt
S2.S1.txt
S3.S2.S1.txt
S1.txt

我想要的是:

S1.txt
S1.txt
S1.txt
S1.txt

其中S1,,,, … 可以是任何内容(字母、数字、括号、嵌入连字符),S2并且S3每行都不同,而最后一个子字符串(本例中为 txt)始终相同。我正在尝试为此构建一个 REGEX,但失败了。有人能建议一种方法来做到这一点吗?

答案1

尝试这个:

查找内容:^.*[^\w](\w+\.\w+)$
替换为:\1

解释:

`^` - start of line
`.*` - one or zero characters
`[^\w]` - one character which is not a word (alphanumeric or underscore)
`(` - start of group 1
`\w+` - one or more word characters
`\.` - the character `.` escaped
`\w+` - one or more word characters
`)` - end of group 1
`$` -  end of line

答案2

  • Ctrl+H
  • 找什么:^.*?(?=[^.]+\.[^.]+\.[^.]+$)
  • 用。。。来代替:LEAVE EMPTY
  • 查看 环绕
  • 查看 正则表达式
  • 取消选中 . matches newline
  • Replace all

解释:

^                   # beginning of line
    .*?             # 0 or more any character but newline
    (?=             # positive lookahead, make sure we have after:
        [^.]+           # 1 or more non dot
        \.              # 1 dot
        [^.]+           # 1 or more non dot
        \.              # 1 dot
        [^.]+           # 1 or more non dot
      $                 # end of line
    )               # end lookahead

截图(之前):

在此处输入图片描述

截图(之后):

在此处输入图片描述

相关内容