提取数字后跟特定文本

Extract numbers followed by specific text

我是 Regex 的新手,我正在寻找一个 Regex 来提取任何类型的数字(如 23,23a,24-26),这些数字后面紧跟着一个被 ! 包围的文本。

更多说明: 需要匹配数字(简单数字,由破折号分隔的数字范围或数字后跟字母(a,b,c,d,..)),紧跟其自身(忽略逗号)和包围的文本通过 !

例如在下面的文本中,我正在寻找我制作的部分 Italic

; 46-58 !some text! ; , 5 some text, 3-21 , 6-22 some text, 16 some text !some text! ; 46-58 some text, 5 !some text! ; 3-21 , 6-22 some text, 16 some text, some text !some text! ; 46-58 some text, 5 some text, 3-21 ,23a , 6-22 !some text! ;

为了更清楚,我把我感兴趣的文字标红了。

到目前为止我想出了以下正则表达式

\![\w\s]*\! => 找到被 !

包围的文本

[a-z]?[\s|,]? [\-|,| | | | | |0-9|-|\d+[\-|a-z]*\d*]*\![\w\s]*\! => 这个 select 两个连续 ;

之间的所有内容

\d+[-,]*[a-z]*\d+[a-z]*\s*[,]* => 这个select任何一种编号

但到目前为止,我无法将它们组合成 select 我想要的。

如果我理解正确的话,您想要匹配紧接在由 ! 符号包围的文本部分之前的模式。我认为确切的答案将取决于要匹配的 pattern 。毕竟它可能不太适合正则表达式。

我创建了与问题中的表达式匹配的 this 示例 (javascript)。

注: 我对要匹配的模式做了一些假设。即,模式以数字开头,只能包含数字、破折号、逗号和字符a