Google sheet : REGEXREPLACE 匹配除特定模式之外的所有内容

Google sheet : REGEXREPLACE match everything except a particular pattern

我会尝试替换此字符串中的所有内容:

[JGMORGAN - BANK2] n° 10 NEWYORK, n° 222 CAEN, MONTELLIER, VANNES / TARARTA TIs 1303222074, 1403281851 & 1307239335 et Cloture TIs 1403277567, 1410315029

以下号码除外: 1303222074 1403281851 1307239335 1403277567 1410315029

我已经构建了一个正则表达式来匹配它们:

1[0-9]{9}

但我还没有想出相反的方法,即除了所有匹配项之外的所有内容...

google 电子表格使用 Re2 正则表达式引擎,并且不支持许多可以帮助您执行此操作的有用功能。因此,一个基本的解决方法可以帮助您:

首先匹配你要保留的内容并捕获它:

模式:[0-9]*(?:[0-9]{0,9}[^0-9]+)*(?:([0-9]{9,})|[0-9]*\z)

替换:</code><em>(后面有一个space)</em></p> <p><a href="https://regex101.com/r/gB7dO3/1" rel="nofollow">demo</a></p> <p>所以可能是这样的:</p> <pre><code>=TRIM(REGEXREPLACE("[JGMORGAN - BANK2] n° 10 NEWYORK, n° 222 CAEN, MONTELLIER, VANNES / TARARTA TIs 1303222074, 1403281851 & 1307239335 et Cloture TIs 1403277567, 1410315029"; "[0-9]*(?:[0-9]{0,9}[^0-9]+)*(?:([0-9]{9,})|[0-9]*\z)"; " "))

首先感谢Casimir 的帮助。它给了我一个想法,使用内置函数和强大的正则表达式大声笑是不可能的。 我发现我可以为自己的目的制作一个自制函数(是的,我不是很“最新”)。 它的编码不是很好,它 returns doublons。但是我没有正确修复它,而是在 if 之上使用内置的 UNIQUE() 函数来摆脱它们;它很丑,我很懒,但它完成了工作,即特定正则表达式的所有匹配列表(即:1[0-9]{9})。这是:

function ti_extract(input) {
  var tab_tis = new Array();
  var tab_strings = new Array();


  tab_tis.push(input.match(/1[0-9]{9}/)); // get the TI and insert in tab_tis

  var string_modif = input.replace(tab_tis[0], " "); // modify source string (remove everything except the TI)
  tab_strings.push(string_modif); // insert this new string in the table

  var v = 0;
  var patt = new RegExp(/1[0-9]{9}/);
  var fin = patt.test(tab_strings[v]);

  var first_string = tab_strings[v];


  do {
    first_string = tab_strings[v]; // string 0, or the string with the first removed TI
    tab_tis.push(first_string.match(/1[0-9]{9}/)); // analyze the string and get the new TI to put it in the table

    var string_modif2 = first_string.replace(tab_tis[v], " "); // modify the string again to remove the new TI from the old string
    tab_strings.push(string_modif2);

    v += 1;
  }
  while(v < 15)

  return tab_tis;
}

您也可以使用动态本机函数执行此操作:

=REGEXEXTRACT(A1,rept("(\d{10}).*",counta(split(regexreplace(A1,"\d{10}","@"),"@"))-1))

基本上它首先被所需的字符串拆分,以确定它出现了多少次,然后重复正则表达式以动态创建该数量的捕获组,从而最终只留下这些值。