我正在尝试为Rapidminer中的Tokenizer
运算符查找正则表达式。
现在,我要做的是将文本分成两个词的一部分。例如,That was a good movie.
应得出That was
,was a
,a good
,good movie
。
关于分词器中的正则表达式的特殊之处在于,它充当分隔符的角色,因此您匹配的是分割点,而不是要保留的内容。
因此,首先想到的是使用\s
以便在空白处进行拆分,但这将导致分别获取每个单词。
所以,我的问题是如何强制表达式以某种方式跳过两个空白之一?
您可以做的是使用零宽度的组(例如正向向前看,如示例所示)。正则表达式通常“消耗”它检查的字符,但是在正向查找/向后查找时,您断言字符存在,而不会阻止进一步的检查来检查那些字母。
这应该适合您的目的:
(\w+)(?=(\W+\w+))
以下模式对两个单词的每对匹配(请注意,由于它没有一对,因此不会匹配最后一个单词)。第一个单词在第一个捕获组(\w+)
中。然后正向查找包括一个非单词字符序列\W+
的匹配项,然后是另一个单词字符串\w+
的匹配项。前瞻(?=...)
第二个单词未“消耗”。
Here is a link to a demo on Regex101
请注意,对于每个匹配项,每个单词都在其自己的捕获组(组1,组2)中