正则表达式匹配 2 个字符之前的数字,使用 OR google 表
Regex match digits before 2 characters, using OR google sheets
我在使用 RE2 RegEx 的 Google 表格中使用 REGEXEXTRACT
。
我想获取出现在字符 P
之前或字符 MC
.
之前的字符串中的数字
这是我目前的情况:(\.?\d*).?MC
如果我的文字类似于“FM.3 MC1
”,则此方法有效。在 Google 表格中是这样的:
=REGEXEXTRACT(A1,"(\.?\d*).?MC")
这适用于在 MC
之前获取数字,我想像这样添加 OR P
:
(\.?\d*).?MC|P
这个 returns .3
如果我的文字是“FM.3 MC1
”,但如果我的文字是“FM.3 MC1 P2
”或“FM.3 P1
”则它是空白的returns #N/A
如果我的文本是“FM.3
”。
此外,如果我的正则表达式是 (\.?\d*).?P|MC
,那么它 returns .3
如果我的文本是“FM.3 P1
”,如果我的文本是“[=29=”,它是空白的]
我不确定这是否是 RegEx,或者 Google 工作表是否很奇怪。
我正在寻找提示。
未经测试(我懒得根据您选择的格式构建合理的数据样本):
=join("",REGEXEXTRACT(A1,"(.?\d*).?MC|(.?\d*).P"))
您可以使用
(\.?\d*)\W?(?:MC|P)
我用 \W
替换了 .?
(=任何 1 或 0 个字符),因为我认为数字和字母之间只能有一个 non-word 字符。
参见regex demo。
详情
(\.?\d*)
- 第 1 组(REGEXEXTRACT
returns):可选的 .
后跟 0 个或更多数字(更改为 (\.?\d+)
以匹配1位或更多位)
\W?
- 一个可选的 non-word 字符
(?:MC|P)
- non-capturing 组(因此,它不会与 REGEXEXTRACT
一起返回)MC
子字符串或 P
字符。
要将两个结束条件分组,您需要将它们括在括号中。
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 等工具实时查看您的正则表达式匹配情况。
我在使用 RE2 RegEx 的 Google 表格中使用 REGEXEXTRACT
。
我想获取出现在字符 P
之前或字符 MC
.
这是我目前的情况:(\.?\d*).?MC
如果我的文字类似于“FM.3 MC1
”,则此方法有效。在 Google 表格中是这样的:
=REGEXEXTRACT(A1,"(\.?\d*).?MC")
这适用于在 MC
之前获取数字,我想像这样添加 OR P
:
(\.?\d*).?MC|P
这个 returns .3
如果我的文字是“FM.3 MC1
”,但如果我的文字是“FM.3 MC1 P2
”或“FM.3 P1
”则它是空白的returns #N/A
如果我的文本是“FM.3
”。
此外,如果我的正则表达式是 (\.?\d*).?P|MC
,那么它 returns .3
如果我的文本是“FM.3 P1
”,如果我的文本是“[=29=”,它是空白的]
我不确定这是否是 RegEx,或者 Google 工作表是否很奇怪。
我正在寻找提示。
未经测试(我懒得根据您选择的格式构建合理的数据样本):
=join("",REGEXEXTRACT(A1,"(.?\d*).?MC|(.?\d*).P"))
您可以使用
(\.?\d*)\W?(?:MC|P)
我用 \W
替换了 .?
(=任何 1 或 0 个字符),因为我认为数字和字母之间只能有一个 non-word 字符。
参见regex demo。
详情
(\.?\d*)
- 第 1 组(REGEXEXTRACT
returns):可选的.
后跟 0 个或更多数字(更改为(\.?\d+)
以匹配1位或更多位)\W?
- 一个可选的 non-word 字符(?:MC|P)
- non-capturing 组(因此,它不会与REGEXEXTRACT
一起返回)MC
子字符串或P
字符。
要将两个结束条件分组,您需要将它们括在括号中。
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 等工具实时查看您的正则表达式匹配情况。