首页 文章

正则表达式匹配2个字符前的数字,使用OR谷歌表

提问于
浏览
0

我在使用RE2正则表达式的google工作表中使用regexextract

我希望在字符“P”之前或字符“MC”之前的字符串中获取数字

这是我到目前为止( . ?\ d *) . ?MC如果我的文字像“FM.3 MC1”(在谷歌表中它就像这样= REGEXEXTRACT(A1,“( . ?\ d) *)?MC“)

这适用于在MC之前获取数字,我想像这样添加OR P( . ?\ d *) . ?MC | P.

如果我的文本是“FM.3 MC1”,则返回.3,如果我的文本是“FM.3 MC1 P2”或“FM.3 P1”,则返回空白,如果我的文本是“FM.3”,则返回#N / A.

另外,如果我的正则表达式是( . ?\ d *) . ?P | MC,那么......如果我的文本是“FM.3 P1”,则返回.3如果我的文本是“FM.3 MC P1”则为空白

我不确定这是否是正则表达式,或者谷歌表是否很奇怪 .

我正在寻找小费...谢谢

3 回答

  • 1

    你可以用

    (\.?\d*)\W?(?:MC|P)
    

    我用 \W 替换了 .? (=任意1或0个字符),因为我认为数字和字母之间只能有一个非单词字符 .

    regex demo .

    Details

    • (\.?\d*) - 第1组( REGEXEXTRACT 返回):可选 . 后跟0位或更多位数(更改为 (\.?\d+) 以匹配1位或更多位数)

    • \W? - 可选的非单词字符

    • (?:MC|P) - 非捕获组(因此,它不会与 REGEXEXTRACT 一起返回) MC substring或 P char .

  • 2

    UNTESTED(我不能打算从您选择的格式构建合理的数据样本):

    =join("",REGEXEXTRACT(A1,"(.?\d*).?MC|(.?\d*).P"))
    
  • 1

    要对两个结束条件进行分组,您需要将它们括在括号中 .

    var input = [
      "FM.3 MC1",
      "FM.3 MC1 P2",
      "FM.3",
      "FM.3 P2"
    ];
    var patterns = [
      /(.?\d*).?MC|P/g,
      /(.?\d*).?(MC|P)/g
    ];
    for (let p = 0; p < patterns.length; ++p) {
      console.log("Using pattern '" + String(patterns[p]) + "':");
      for (let i = 0; i < input.length; ++i) {
        console.log("\tFrom '" + input[i] + "', found " + (input[i].match(patterns[p]) || "(no matches)"));
      }
    }
    

    您可以使用regextester或regex101等工具实时查看正则表达式匹配 .

相关问题