是否可以在正则表达式中使用周期性?

问题描述 投票:1回答:2

我正在尝试为Rapidminer中的Tokenizer运算符查找正则表达式。

现在,我要做的是将文本分成两个词的一部分。例如,That was a good movie.应得出That waswas aa goodgood movie

关于分词器中的正则表达式的特殊之处在于,它充当分隔符的角色,因此您匹配的是分割点,而不是要保留的内容。

因此,首先想到的是使用\s以便在空白处进行拆分,但这将导致分别获取每个单词。

所以,我的问题是如何强制表达式以某种方式跳过两个空白之一?

regex delimiter rapidminer
2个回答
0
投票

您可以做的是使用零宽度的组(例如正向向前看,如示例所示)。正则表达式通常“消耗”它检查的字符,但是在正向查找/向后查找时,您断言字符存在,而不会阻止进一步的检查来检查那些字母。

这应该适合您的目的:

(\w+)(?=(\W+\w+))

以下模式对两个单词的每对匹配(请注意,由于它没有一对,因此不会匹配最后一个单词)。第一个单词在第一个捕获组(\w+)中。然后正向查找包括一个非单词字符序列\W+的匹配项,然后是另一个单词字符串\w+的匹配项。前瞻(?=...)第二个单词未“消耗”。

Here is a link to a demo on Regex101

请注意,对于每个匹配项,每个单词都在其自己的捕获组(组1,组2)中


0
投票

Here是示例解决方案,(?=(\b[A-Za-z]+\s[A-Za-z]+))受此SO question启发。一旦您了解到这是正则表达式模式重叠的问题,我的问题听起来就错了。

© www.soinside.com 2019 - 2024. All rights reserved.