我有一个行数据集,由于代码错误,其中的字符串重复了一次或多次。数据以大写开头,通常有多个单词,然后字符串重复。有些线路没问题,没有重复测试。例如,数据可能是
The quick brown ox jumps over the lazy dogThe quick brown fox jumps over the lazy dog
ApplesApplesApples
IBM AT Computer
Lamp ShadeLamp Shade
OrangesOranges
I am a Potato
我发现了多个正则表达式来查找重复的词,这些词停在预定义的边界 \b
或 \w
- 这很容易。
查找具有内置边界条件(例如 i am i am a potato
)的静态长度的重复短语(例如,两个重复的单词,如 \w
)也相对容易。我找到了这样的例子,例如 \b(\w+(?:\s*\w*))\s+\1\b
(演示 https://regex101.com/r/4UIrxu/2)。如果在 i am i am i am a potato
中有 3 次重复,则失败,并且只会找到第一次出现。
我的词组包含一个或多个词,因此上述词组匹配器不起作用。
是否可以告诉表达式它的 boundary 是我组成的条件 - 就像一个小写字母后跟一个大写字母(如 T
中的 dogThe
) - 我可以用 \B[a-z][A-Z]\B
来做 - 然后可以用作标记来测试是否重复了前一部分?我无法使用此边界条件修改重复短语模式,但也许仍然可以。
答案 0 :(得分:1)
这很简单,但可能会提供一个开始:
/([A-Z].*)\1{1,}
见https://regex101.com/r/ynfuCO/1
这里引入了边界条件:
/(?:^|(?<=[a-z]))([A-Z].*)\1{1,}
我已经包括了行首以及小写/大写边界,因为这似乎符合您的要求。见https://regex101.com/r/PBFDPY/2
(?<=[a-z])
部分是一个正向后视(参见例如 https://www.regular-expressions.info/lookaround.html),它检查小写字母。您可能需要调整字符类(为了简单起见,我刚刚使用了 [a-z]
,但这通常是不够的)。