如何组合正则表达式外观表达式

对于此示例文本:

The quick brown fox jumps over the lazy dog” is an 1*** English-language 2*** pangram—a phrase that contains all of the letters of the alphabet. It is commonly used for touch-typing practice. It is also used to test typewriters and computer keyboards, show fonts, and other applications involving all of the letters in the 3*** English alphabet 4***.

我需要一个正则表达式来匹配许多x ***令牌,同时剥离前导和尾随空格.如果我对正则表达式的了解有限,那么结果应该匹配到两个单独的环视组中.

English-language

English alphabet

我有两个表达式在隔离但不串联工作:

(?<=1\*\*\*\s).*(?=\s2\*\*\*)
....
(?<=3\*\*\*\s).*(?=\s4\*\*\*)

我已经尝试了各种方法将它们组合在一个表达式中但只得到了不正确的结果.例如

(?<=1\*\*\*\s).*(?=\s2\*\*\*)\w+(?<=3\*\*\*\s).*(?=\s4\*\*\*)

NO MATCHES

我应该指出,我可以控制令牌格式,因此可以根据正则表达式的易用性推荐一个.它只需要包含一系列大多数非字母数字字符,因此它不会在数据中本地找到.我的猜测是我可能需要至少两个令牌;一个开始和一个结束.

编辑:
我已经取得了进展,但我的正则表达式引擎的行为与regex101的行为不同:

(?<=1\*\*\*\s)(.*)(?=\s2\*\*\*).*?(?<=3\*\*\*\s)(.*)(?=\s4\*\*\*)

结果是:

English-language 2*** 3*** English-language

为什么?如何纠正?

最佳答案

(?<=[1-9]\*\*\*)\s*(.*?)(?=\s*[1-9]\*\*\*)

你可以使用它并抓住组1.参见演示.

https://regex101.com/r/cZ0sD2/9

如果你只想要2场比赛使用

(?<=[13]\*\*\*)\s*(.*?)(?=\s*[24]\*\*\*)
点赞