对于此示例文本:
快速的棕色狐狸跳过懒狗“是一个1 ***英语2 *** pangram - 一个包含所有字母表字母的短语。它通常用于触摸打字练习。它还用于测试打字机和计算机键盘,显示字体以及涉及3 ***英文字母4 ***中所有字母的其他应用程序。
我需要一个正则表达式才能在多个x ***标记之间进行匹配,同时剥离前导和尾随空格。如果我对正则表达式的了解有限,那么结果应该匹配到两个单独的环视组中。
英语语言
英文字母
我有两个表达式可以独立工作但不能串联工作:
(?<=1\*\*\*\s).*(?=\s2\*\*\*)
....
(?<=3\*\*\*\s).*(?=\s4\*\*\*)
我尝试过各种方法将它们组合在一个表达式中,但结果却不正确。 e.g。
(?<=1\*\*\*\s).*(?=\s2\*\*\*)\w+(?<=3\*\*\*\s).*(?=\s4\*\*\*)
没有比赛
我应该指出,我可以控制令牌格式,因此请根据正则表达式中的易用性推荐一个。它只需要包含一系列大多数非字母数字字符,因此它不会在数据中本地找到。我的猜测是我可能需要至少两个令牌;一个开始和一个结束。
修改 我取得了进步,但我的正则表达式引擎的行为与regex101的行为不同:
(?<=1\*\*\*\s)(.*)(?=\s2\*\*\*).*?(?<=3\*\*\*\s)(.*)(?=\s4\*\*\*)
结果:
英语2 *** 3 ***英语
为什么呢?如何纠正?
答案 0 :(得分:1)
(?<=[1-9]\*\*\*)\s*(.*?)(?=\s*[1-9]\*\*\*)
您可以使用此功能并抓住group 1
。请参阅演示。
https://regex101.com/r/cZ0sD2/9
如果你只想要2
匹配使用
(?<=[13]\*\*\*)\s*(.*?)(?=\s*[24]\*\*\*)
答案 1 :(得分:1)
如果你想要一个匹配其中一个的正则表达式,你可以使用交替(|
):
(?<=1\*\*\*\s).*(?=\s2\*\*\*)|(?<=3\*\*\*\s).*(?=\s4\*\*\*)
如果你想要一个在不同组中同时匹配的正则表达式,你可以在它们之间使用.*?
并将它们放在匹配的组中(()
):
(?<=1\*\*\*\s)(.*)(?=\s2\*\*\*).*?(?<=3\*\*\*\s)(.*)(?=\s4\*\*\*)