提交消息的正则表达式问题

问题描述

需要这种类型的提交消息

TaskId : 123456 - commit message
TaskId: 123456 - commit message
TaskId:123456 - commit message
TaskId:123456- commit message
TaskIds : 123456**,123456** ( This Can be multiple times with space without space ) - commit message
TaskIds : 123456**and 123456** ( This Can be multiple times with space without space ) - commit message
Task id - 1233443:commit message 

我已经尝试过这个正则表达式,但缺少一些东西

[Tt][Aa][Ss][Kk][Ss]?\s*(?:[Ii][Dd])?\s*[: \s-]?(\s*(?:,|and)?\s*\d+)?\s*(?:\s*)

预期输出是:

$1 = (TaskId:123456,123456) In the commit message on Bitbucket This should be a Link to my custom task system

For Ex:
**https://abc.xyz.com?taskid=$1**

解决方法

从文本中删除评论,然后我假设您要匹配的是:(和类似的变体)

TaskId : 123456 - commit message
TaskId: 123456 - commit message
TaskId:123456 - commit message
TaskId:123456- commit message
TaskIds : 123456,123456 - commit message
TaskIds : 123456 and 123456 - commit message
Task id - 1233443:commit message 

代替 [Tt][Aa][Ss][Kk][Ss]? 那么你也可以使用 insensitive 标志并将该部分更改为 tasks?

如果你想限制 (\s*(?:,|and)?\s*\d+)* 只接受一个 ,/and,那么你可以翻转它,即匹配 \d+ 然后从零到-许多",number"。简而言之(?:(\d+)(?:\s*(?:,|and)\s*(\d+))*)

最终模式可能如下所示:

^task(?:\s*ids?)\s*[:-]\s*(?:(\d+)(?:\s*(?:,|and)\s*(\d+))*)\s*[:-]\s*(.*)$

Demo on Regex101

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...