一个或两个数字的正则表达式模式不属于 4 数字组
Regex pattern for one or two numbers not part of a 4 number group
我正在尝试编写一个将在 Data Studio 报告(使用 RE2)中使用的正则表达式模式来提取 1 到 13 之间的第一个数字。
这是我想要的示例:
8X/CS2 = 8
Experiment = no match
7Y/CS3 = 7
7Y/CS2 = 7
2019-10T/Tk1 = 10
2019-7x/Pe4 = 7
2019-8x/Pe4 = 8
2019-12E/Tk-II = 12
2019-12D/Ps-4 = 12
我已经确定 ([1-9]|1[0123])
会提取数字。
RE2 不支持负面回溯,所以我不能使用它。
以下正则表达式似乎有效:
(?:^|\D)(1[0123]|[1-9])(?:\D|$)
号码本身将在第一个捕获组中可用。
这里是对模式的解释:
(?:^|\D) match either start of string or non digit character
(1[0123]|[1-9]) match 1-13
(?:\D|$) match either end of string or non digit character
这个想法是匹配 1-13 ,它被定义为非数字的东西被两侧的边界包围。请注意,使用环顾四周,我们可以更轻松地编写:
(?<!\d)(1[0123]|[1-9])(?!\d)
但是,由于您的正则表达式风格不支持此功能,我们必须使用其他方式。
我正在尝试编写一个将在 Data Studio 报告(使用 RE2)中使用的正则表达式模式来提取 1 到 13 之间的第一个数字。
这是我想要的示例:
8X/CS2 = 8
Experiment = no match
7Y/CS3 = 7
7Y/CS2 = 7
2019-10T/Tk1 = 10
2019-7x/Pe4 = 7
2019-8x/Pe4 = 8
2019-12E/Tk-II = 12
2019-12D/Ps-4 = 12
我已经确定 ([1-9]|1[0123])
会提取数字。
RE2 不支持负面回溯,所以我不能使用它。
以下正则表达式似乎有效:
(?:^|\D)(1[0123]|[1-9])(?:\D|$)
号码本身将在第一个捕获组中可用。
这里是对模式的解释:
(?:^|\D) match either start of string or non digit character
(1[0123]|[1-9]) match 1-13
(?:\D|$) match either end of string or non digit character
这个想法是匹配 1-13 ,它被定义为非数字的东西被两侧的边界包围。请注意,使用环顾四周,我们可以更轻松地编写:
(?<!\d)(1[0123]|[1-9])(?!\d)
但是,由于您的正则表达式风格不支持此功能,我们必须使用其他方式。