regex - 在搜索连续数字时结合忽略http行
问题描述
我正在完成的是在每一行中搜索连续的 8 位数字。我有那个工作。
这是正则表达式:
^.*(\b[0-9]{8}\b)$
这是测试数据:它在每一行上拾取每个连续的数字。
1. This is my account number 32145678
2. t 12345678
3. 43215678
4. 54321678
现在,我正在做的是忽略其中包含 https 或 http 的任何行。
(?is)^(?!http:|https:)$|^.*(\b[0-9]{8}\b)$
下面是测试数据。第 1、2、4、5、6、7 行应该匹配。第 3 行应该被忽略。
1. 87654321
2. 12345678
3. http://example.org/app=87654321
4. This is my account number 32145678
5. t 12345678
6. 43215678
7. 54321678
现在发生的只是第 7 行匹配。有人可以解释我做错了什么吗?
谢谢,
拉斯
解决方案
在您尝试的模式中,^(?!http:|https:)$|^.*(\b[0-9]{8}\b)$
第一部分^(?!http:|https:)$
将只匹配一个空字符串。
这意味着匹配任何断言右边的内容不是http:
或的空字符串https:
您使用了 inline s修饰符,这将使第二部分中的点^.*(\b[0-9]{8}\b)$
与换行符匹配。
所有这些值一个接一个,捕获组将捕获所有值的最后 8 位,这就是为什么您看到只有第 7 行被捕获。请参阅启用多行标志的演示)
您可以将模式更新为
(?mi)^(?!https?:).*\b(\d{8})$
(?mi)
多行和不区分大小写的内联修饰符^
线的开始(?!https?:)
断言右边的内容不是 http: 或 https:.*
匹配除换行符以外的任何字符 0+ 次\b(\d{8})
字边界,捕获组 1中的 8 个数字$
行结束
请注意,您可以省略之间的单词边界\b)$
推荐阅读
- android - 火力基地。身份验证错误:您的凭据不再有效
- javascript - js air-datepicker 输入和必需的不起作用
- matplotlib - 无法在 Databricks 上运行 Pandas 分析
- python - matplotlib seaborn heatmap x,y meshgrid logscale 问题
- c++ - 显示小部件并导致窗口大小更改时是否会触发事件?
- python - django.core.exceptions.ImproperlyConfigured:Boardapi_update 缺少 QuerySet
- java - Selenium 自动下载文件,无需保存对话框
- vue.js - vue 创建失败并出现 ERR_ASSERTION
- css - SVG 手写笔画剪辑路径在 Safari 上被截断
- office-addins - 如何在 Fluent UI React 中使用可折叠列表