regex - 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
这与“句点”之后的数字匹配,我可以为我的特定目的添加“句点”。但我不明白为什么我会得到不同的匹配。
解决方案
您不需要.*
经过一段时间,所以只需从您的正则表达式中删除它并像这样编写它
period(?=\s[0-9]{1})|alternative
这从字面上匹配period
,后面跟着一个空格和一个数字(由您的正面展望确保)。此外,您真的不需要编写{1}
,因为这是默认设置并且是多余的。此外,如果您不希望句号在较大的文本中部分匹配,\b
请在其之前使用单词边界并将您的正则表达式更改为此,
\bperiod(?=\s[0-9])|alternative
此外,您的后视(?<=period\s)[0-9]{1,4}|alternative
对于匹配文本是不正确的period
,实际上,后视只会匹配前面加period
一个空格的数字。
推荐阅读
- arrays - 多维数组:拆分并重新组合
- batch-file - 如何连接两个变量值并在 if 条件下使用
- netlogo - 在相距一定距离的海龟之间建立联系
- webstorm - 如何在 WebStorm 的特定文件夹中运行所有测试
- python - Python - 将列表复制到剪贴板
- c# - 可观察的
不包含“哪里”的定义 - python - Python:如何禁用在属性字典中创建新键?
- python - 错误:“ascii”编解码器无法对位置 227 中的字符“\xa7”进行编码:序数不在范围内(128)
- javascript - 如何在 vue-test-utils 中用 jest 查找输入和模拟变化值,最佳实践
- c# - System.Random 的保存状态