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

时间:2018-03-06 20:16:22

标签: regex google-sheets re2

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

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

这是我到目前为止所拥有的 (。?\ d *)。?如果我的文字类似于“FM.3 MC1”,MC会有效 (在谷歌表中它就像这样= 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”

,则为空白

我不确定这是否是正则表达式,或者google表格是否很奇怪。

我正在寻找提示......谢谢

3 个答案:

答案 0 :(得分:2)

您可以使用

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

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

请参阅regex demo

<强>详情

  • (\.?\d*) - 第1组(REGEXEXTRACT返回的内容):可选.后跟0位或更多位数(更改为(\.?\d+)以匹配1位或更多位数)< / LI>
  • \W? - 一个可选的非单词字符
  • (?:MC|P) - 非捕获组(因此,不会返回REGEXEXTRACTMC子字符串或P字符。

答案 1 :(得分:1)

UNTESTED(我无法根据您选择的格式构建合理的数据样本):

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

答案 2 :(得分:1)

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

&#13;
&#13;
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)"));
  }
}
&#13;
&#13;
&#13;

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