regex - 如何使两个不同的正则表达式合二为一?
问题描述
我搜索以匹配特定键的日期,但目前我成功匹配所有日期,或匹配我的特定键但不与日期分开。
这是一个更直观的解释
在输入我有
Mystring ="
Text("List1:[2000-00-00 00:00, 2020-09-02 04:30, 2020-09-03 00:30, 2020-09-03 02:30, 2020-09-03 04:30, 2020-09-03 07:25, 2020-09-03 10:00, 2020-09-03 10:02],
Text("List2:[2000-00-00 00:00, 2020-09-02 04:30, 2020-09-03 00:30, 2020-09-03 02:30, 2020-09-03 04:30, 2020-09-03 07:25, 2020-09-03 10:00, 2020-09-03 10:02]
"
使用此功能,我匹配 Mystring 的所有日期
RegExp regExp79 = new RegExp(r'\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}');
mylistdate = regExp79.allMatches(Mystring).map((z) => z.group(0));
print(mylistdate);
但输出需要所有日期(list1 和 List2)我尝试只匹配 list1
所以我尝试进行字符限制。例如,如果我只想要 list1 中的日期,我尝试匹配 Text("List1:[
. 和]
所有这些正则表达式单独工作,但没有找到如何一起工作
Text\("list1:\[ => start limitation
(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}) => extraction of date
(.*?)] => end of limitation
但是如果我把它全部融化,它就不起作用,它只选择第一个日期,我会匹配有限选择的所有日期
Text\("List1:\[(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}).*?]
解决方案
您可以使用
(?<=Text\("List1:\[[^\][]*?)\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}(?=[^\][]*])
查看正则表达式演示
细节
(?<=Text\("List1:\[[^\][]*?)
- 一个积极的向后看,需要Text("List1:[
紧接着当前位置左侧的除方括号之外的任何 0 个或多个字符(尽可能少)\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}
- 4 位,-
, 2 位,-
, 2 位, 空格, 2 位,:
2 位(?=[^\][]*])
- 一个正向前瞻,需要除方括号外的任何 0 个或更多字符(尽可能多),紧跟]
当前位置右侧的字符。
代码示例:
String Mystring ="\nText(\"List1:[2000-00-00 00:00, 2020-09-02 04:30, 2020-09-03 00:30, 2020-09-03 02:30, 2020-09-03 04:30, 2020-09-03 07:25, 2020-09-03 10:00, 2020-09-03 10:02],\nText(\"List2:[2000-00-00 00:00, 2020-09-02 04:30, 2020-09-03 00:30, 2020-09-03 02:30, 2020-09-03 04:30, 2020-09-03 07:25, 2020-09-03 10:00, 2020-09-03 10:02]";
RegExp regExp79 = new RegExp(r'(?<=Text\("List1:\[[^\][]*?)\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}(?=[^\][]*])');
print(regExp79.allMatches(Mystring).map((z) => z.group(0)).toList());
输出:
[2000-00-00 00:00, 2020-09-02 04:30, 2020-09-03 00:30, 2020-09-03 02:30, 2020-09-03 04:30, 2020-09-03 07:25, 2020-09-03 10:00, 2020-09-03 10:02]
推荐阅读
- swift - 我无法在 ViewController 中将标签连接为插座
- vue.js - 按 2 个或更多字段过滤 BootstrapVue 表
- shopify - 是否可以在 Shopify 产品页面上使用替代文本添加视频
- scala - Spark SQL first 和 last 聚合函数——意外结果
- c - 我对变量的赋值和 While 函数有疑问
- python - 导入和名称绑定最佳实践
- ios - 将带有源的 Pod 依赖项添加到 .podspec
- azure - Use-AzureSqlJobConnection -CurrentAzureSubscription 时出错
- html - 无法将元素缩放到 100% 宽度
- javascript - Angular 2+ how to get focus to modal inputs on opening the modal?