regex - 正则表达式匹配最后一次出现之前
问题描述
我想在这里
\d{3}(?=.*(?!\d{3})string)
只匹配333000 111 222 333 string 444 555 666
- 但它没有。有人知道为什么吗?
我也希望在这种情况下000 111 222 333 sdfasdjf;sdfjn 999 skljdfn\;sdlfn\sd string 444 555 666
只有 999 得到匹配.. 只是为了澄清。
我尝试在许多星座中嵌套正面和负面的前瞻和后视并实现这一目标,并变得有点好奇和有点绝望..不再确定正则表达式可以做到这一点..所以如果您有任何建议(除非使用不同的工具)-lmk
解决方案
该\d{3}(?=.*(?!\d{3})string)
模式尽可能多地匹配后跟任何 0+ 字符的任何 3 位数字,然后匹配string
不以 3 位数字开头的文本 - 这始终是正确的,string
不以 3 位数字开头。
您可以使用
\d{3}(?!.*\d{3}.*string)(?=.*string)
或者,如果 3 位数的块必须作为整个单词匹配:
\b\d{3}\b(?!.*\b\d{3}\b.*string)(?=.*string)
或者 - 如果这 3 位数字必须始终用空格括起来
(?<!\S)\d{3}(?!\S)(?!.*(?<!\S)\d{3}(?!\S).*string)(?=.*string)
查看正则表达式演示
在这里,匹配三个数字后,
(?!.*\d{3}.*string)
- 负前瞻确保没有 3 位数字,然后string
在当前位置右侧的某个位置(?=.*string)
- 需要string
出现在当前位置右侧的任何位置的正向前瞻。
推荐阅读
- powerbi - 试图弄清楚 ParallelPeriod 如何在 DAX 中工作
- javascript - 使用 Javascript 从 HTML 页面获取 textarea 值到 Python Flask
- c - For循环累积计算问题。C 编程
- xamarin - 如何访问 Dynamics 365 的实例?
- javascript - 选项卡键盘事件上的 preventDefault 会在连续键入期间重置光标位置
- notepad++ - 是否可以在 Notepad++ 用户定义语言中以“后缀模式”突出显示关键字组?
- django - 如何从 django 用户外键获取项目
- java - 系统无法通过 XSL 找到 DTD 引用
- docker - 如何使用预加载的核心创建 docker 映像
- python - 如何设置 CEF 窗口图标(在 python 中)