只保留RegEx Match的最后一个实例

时间:2016-04-25 23:19:11

标签: regex notepad++

我有一个包含以下文字的文字文件

Searching at 2016-04-25 12:35:00
Searching at 2016-04-25 12:40:00
Searching at 2016-04-25 12:45:00
    Found Data
Searching at 2016-04-25 12:50:00
Searching at 2016-04-25 12:55:00
    Found Data

我正在尝试使用Notepad ++删除Searching...的所有行,除非之后有数据。

我目前正在使用Notepad ++将Searching.*?$\r\n(Searching.*?)的所有实例替换为$1。但是,我需要多次按Replace All几次,具体取决于搜索的连续次数而不查找数据。

在上面的示例中,所需的输出为:

Searching at 2016-04-25 12:45:00
    Found Data
Searching at 2016-04-25 12:55:00
    Found Data

使用RegEx在Notepad ++中有没有办法解决这个问题?

3 个答案:

答案 0 :(得分:1)

使用此模式:

#pragma once
#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>
#include <iostream>
#include <time.h>

#define SCREEN_X 1000   //Size of Memory, can be changed
#define SCREEN_Y 800    //Size of Memory, can be changed
#define ATTK_SPD 250    //Speed of Player Attack
#define P_SPD .2        //Player's Speed
#define MAX_ENEMIES 5

class Game
{
 public:
        Game();
        ~Game();
        void run();
        void attack(sf::Event event);
        void player_movement(sf::Event event);
        void movementUpdate(sf::Sprite &player, sf::Sprite enemy[]);
        void playerUpdate(sf::Sprite &player);
        void enemyAiUpdate(sf::Sprite &player, sf::Sprite &enemy);
        void collision(sf::Sprite &player, sf::Sprite &enemy);
        void check_closeWindows(sf::Event event, sf::RenderWindow &window);
        void border(sf::Sprite &player);
        int rand_int(int min, int quantity);
        //void Game::createPlayer(sf::Sprite &player);
 private:
        int DASH;
        double x, y;
        int total_enemies;
        int p_timer;
        int e_timer;
};

Online Demo

答案 1 :(得分:1)

您可以使用此模式

(?:Searching.*?$\r\n)+(Searching.*?\r\n)

并将其替换为$1

答案 2 :(得分:1)

这是一种完成工作的方法:

  • 控制 + ħ
  • 找到:Searching.+\R(?=Searching)
  • 替换为:NOTHING
  • 全部替换

检查Regular expresssion dot matches newline 这将替换每个搜索行,然后是另一个搜索行。

\R代表任何类型的换行符 (?=Searching)是一个积极的先行,确保我们在换行后确定Searching这个词。