首页 > 解决方案 > Lookbehind 难题或团体?

问题描述

很抱歉,我无法提出一个好的问题:

此正则表达式应找到单词“句点”,后跟一个空格和一位数字:

period.*(?=\s[0-9]{1})|alternative

如果我输入TEST 2019 to period 3.csv正则表达式匹配的行period

如果我输入TEST period 3 2019.csv正则表达式匹配的行period 3

我的预期比赛是period 3

您可以从 regex101 的此屏幕截图中了解我的意思:

现在我已经用像这样的lookbehind positve解决了它:

(?<=period\s)[0-9]{1,4}|alternative

这与“句点”之后的数字匹配,我可以为我的特定目的添加“句点”。但我不明白为什么我会得到不同的匹配。

标签: regex

解决方案


您不需要.*经过一段时间,所以只需从您的正则表达式中删除它并像这样编写它

period(?=\s[0-9]{1})|alternative

这从字面上匹配period,后面跟着一个空格和一个数字(由您的正面展望确保)。此外,您真的不需要编写{1},因为这是默认设置并且是多余的。此外,如果您不希望句号在较大的文本中部分匹配,\b请在其之前使用单词边界并将您的正则表达式更改为此,

\bperiod(?=\s[0-9])|alternative

演示

此外,您的后视(?<=period\s)[0-9]{1,4}|alternative对于匹配文本是不正确的period,实际上,后视只会匹配前面加period一个空格的数字。

检查这个演示


推荐阅读