簡體   English   中英

notepad++ 正則表達式搜索失敗

[英]notepad++ regular expression search failed

我嘗試使用以下內容搜索一些文本並將其替換為以#開頭的一些其他文本。 在 regex101 上它工作正常,但 NotePad++ 說搜索失敗。 還嘗試在 \n 之前添加 \r 但沒有幫助。

正則表達式: (class boy(?:.*\n)+\s*)(Height.*;\n)((?:.*\n)+})

要搜索的文本:

class boy Mike
{
Age = 20;
PhoneNum = 658965;
Height = 198;
City = LA
}
note boy Joe
{
Age = 21;
PhoneNum = 558565;
Height = 178;
City = BA
}

class boy Joe
{
Age = 21;
PhoneNum = 558565;
Height = 178;
City = BA
}

替代品: $1#$2$3

Output:

class boy Mike
{
Age = 20;
PhoneNum = 658965;
#Height = 198;
City = LA
}
note boy Joe
{
Age = 21;
PhoneNum = 558565;
Height = 178;
City = BA
}

class boy Joe
{
Age = 21;
PhoneNum = 558565;
#Height = 178;
City = BA
}

您可以使用

查找內容^class boy.*(?:\R(?.}$)?*)*\R\K(?=Height)
替換為#
. 匹配換行符:禁用

在此處輸入圖像描述

詳情

  • ^ - 行首
  • class boy - class boy ,然后盡可能少的任何零個或多個字符
  • .* - 線的rest
  • (?:\R(?.}$).*)* - 零或多行到文件末尾或等於}的行
  • \R - 換行序列
  • \K - 省略匹配的文本
  • (?=Height) - 就在右邊,必須有Height

我已經重寫了你的正則表達式,所以它不使用newline

(?<=class boy \w+\s*\{[^}]+?)(Height[^;]+;)(?=[\s\S]+?\})

使用“全局”和“多行”選項。

用。。。來代替:

#$1

說明

(?<=class boy \w+\s*\{[^}]+?)尋找: class boy ,一個空格和一個或多個單詞字符,后跟一個或多個空格(包括換行符)。 然后尋找{后跟一個或多個不是}的字符。

(Height[^;]+;)匹配 'Heigth' 后跟一個或多個字符不是; - 將比賽放在第 1 組。

(?=[\s\S]+?\})期待任何后跟}的字符。

替換為#和組 1。

另一種選擇...

尋找; (class[\s\S]+?(?!note))(height)

全部替換: $1#$2$3

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM