Поиск по всей строке и изменение слов с помощью ize на ise с помощью регулярных выражений в Notepad ++ - PullRequest
0 голосов
/ 02 января 2019

Я хочу найти все слова в строке / предложении, найти любое слово с помощью 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

Заменить: $1ise

Пока все, что я получаю, это первое слово в строке с ize для работы или последнее слово с ize для работы.

Пример Организация для общения любого размера.Организовать для общения любого размера.

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

Replace $1ise

работал как задумано.Добавлены проблемы с капитализацией (? I)

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Сделать массив белых списков

  • Сделать исключенные слова (whitelist) массивом строк
  • .split(' ') текст, который ищется через (searchStr) в массив
  • затем .map() через каждое слово массива
    • с использованием .indexOf() для сравнения слова с whitelist
    • , используя .test(), чтобы увидеть, является ли это слово x+"ize" для .replace()
  • Как только searchArray будет завершено, .join() превратится в строку (resultString).

Демо

«организовать», «загипнотизировать», «социализировать» и «крестить» были добавлены в строку поиска некоторых слов из белого списка

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, '$1ise');
  } else {
    match = word;
  }
  return match;
});

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

console.log(resultString);
0 голосов
/ 03 января 2019

Регулярное выражение ([a-zA-Z-\s]+)ize содержит маркер пробела (\s), поэтому оно будет соответствовать всему, что находится за границей слова. Возможно, вы захотите работать с \w и / или \b, чтобы соответствовать только символам из слова, где находится "ize". Кроме того, вам не нужно указывать ^ в начале, так как это будет соответствовать началу строки.

Возможное регулярное выражение: (?!....your list....)(\w+)ize

Пример ввода: «Организовать для общения любого размера.»

Найдено совпадений: "Организовать" и "Социализировать", но не "Размер", см. https://regex101.com/r/UIfoa8/1

После этого вы можете использовать замену $1ise, чтобы заменить найденную строку захваченной группой и "ise".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...