在 Notepad++ 中使用正则表达式搜索整行并使用 ize 将单词更改为 ise

Search through whole line and change words with ize to ise using regex in Notepad++

我想搜索 line/sentence 中的所有单词并检测任何带有 ize 的单词并将其转换为 ise,但列出的某些单词除外。

查找:^(?!size)(?!resize)(?!Belize)(?!Bizet)(?!Brize)(?!Pfizer)(?!assize)(?!baize)(?!bedizen)(?!citizen)(?!denizen)(?!filesize)(?!maize)(?!prize)(?!netizen)(?!seize)(?!wizen)(?!outsize)(?!oversize)(?!misprize)(?!supersize)(?!undersize)(?!unsized)(?!upsize)([a-zA-Z-\s]+)ize

替换:ise

到目前为止,我得到的只是行中带有 ize 的第一个词,或者带有 ize 的最后一个词。

示例组织任何规模的社交活动。 组织任何规模的社交活动。

Find (?i)(?!size|resize|Belize|so&so|unsized|upsize)(?<!\w)(\w+)ize

Replace ise

按预期工作。添加了大小写问题 (?i)

正则表达式 ([a-zA-Z-\s]+)ize 中有空格标记 (\s),因此它将匹配超出单词边界的任何内容。您可能希望使用 \w and/or \b 来仅匹配 "ize" 所在单词中的字符。此外,您不希望 ^ 位于开头,因为这将匹配字符串的开头。

可能的正则表达式:(?!....your list....)(\w+)ize

示例输入:"Organize to socialize whatever size."

找到匹配项:"Organize" 和 "socialize",但未找到 "size",请参阅 https://regex101.com/r/UIfoa8/1

之后,您可以使用替换 ise 将找到的字符串替换为捕获的组和 "ise"。

创建白名单数组

  • 将排除的单词 (whitelist) 设为字符串数组
  • .split(' ') 正在搜索的文本 (searchStr) 到数组中
  • 然后.map()遍历数组的每个单词
  • 一旦 searchArray 完成,.join() 将其转换为字符串 (resultString)。

演示

“organize”、“mesmerized”、“socialize”、“baptize”被混入了一些白名单词的搜索字符串中

var searchStr = `organize Belize Bizet mesmerized Brize Pfizer assize baize bedizen citizen denizen filesize socialize maize prize netizen seize wizen outsize baptize`;

var whitelist = ["size", "resize", "Belize", "Bizet", "Brize", "Pfizer", "assize", "baize", "bedizen", "citizen", "denizen", "filesize", "maize", "prize", "netizen", "seize", "wizen", "outsize", "oversize", "misprize", "supersize", "undersize", "unsized", "upsize"];

var searchArray = searchStr.split(' ').map(function(word) {
  var match;
  if (whitelist.indexOf(word) !== -1) {
    match = word;
  } else if (/([a-z]+?)ize/i.test(word)) {
    match = word.replace(/([a-z]+?)ize/i, 'ise');
  } else {
    match = word;
  }
  return match;
});

var resultString = searchArray.join(', ');

console.log(resultString);