【发布时间】:2022-01-05 03:04:53
【问题描述】:
我最初的问题因重复而被关闭。我不同意它是重复的,因为这是查看正则表达式语法的不同用例。我试图在下面澄清我的问题。
是否可以创建一个正则表达式来匹配字符串中的两个重复的连续字符(在本例中为小写字母),但如果任一侧有相同的字符,则不匹配字符串的一部分。例如匹配 'aa' 但不匹配 'aaa' 或 'aaaa'?
另外:
-
虽然我使用的是 Python 3.10,但我正在尝试在不使用外部模块提供的附加功能的情况下使用“标准”正则表达式语法来确定这是否可行。例如使用 Python,这意味着使用标准库中的
're'模块的解决方案。 -
如果有 3 个或更多重复的连续字符,如果字符串的其他地方有两个重复的连续字符,则字符串应该仍然匹配。例如匹配
'aa',即使'bbb'存在于字符串中的其他位置。 -
如果两个重复的连续字符出现在字符串的开头或结尾,字符串也应该匹配。
-
如果特定长度有所不同,我的示例是 16 个字符串。
示例:
ffumlmqwfcsyqpss 应该匹配 'ff' 或'ss'。
zztdcqzqddaazdjp 应该匹配 'zz'、'dd'、'aa'。
urrvucyrzzzooxhx 应该匹配 'rr' 或'oo',即使'zzz' 存在于字符串中。
zettygjpcoedwyio 应该匹配 'tt'。
dtfkgggvqadhqbwb 应该不匹配 'ggg'。
rwgwbwzebsnjmtln 应该不匹配。
我最初尝试过的
([a-z])\1(?!\1) 否定第三个重复字符,但这只是将匹配移动到重复字符串的末尾。
在开始时使用负环视来补偿匹配,但我认为我正在造成某种永远不会匹配的循环。
>>>import re
>>>re.search(r'([a-z])\1(?!\1)', 'dtfkgggvqadhqbwb')
<re.Match object; span=(5, 7), match='gg'> # should not match as 'gg' ('[gg]g' or 'g[gg]')
当前提供的解决方案不符合描述的标准。
-
Wiktor Stribiżew's solution 使用 external python regex module 的附加
(*SKIP)功能。 -
如果同一字符串中有重复的三元组等,Tim Biegeleisen's solution 不匹配重复的对。
-
在链接的问题中,Cary Swoveland 的解决方案 do not work for duplicate pairs 在字符串的开头或结尾或 match even when there is no duplicate in the string。
-
在链接的问题中,the fourth bird's solution 不匹配字符串开头或结尾的重复对。
总结
到目前为止,唯一有效的答案是 Wiktor Stribiżew 的,但这使用了外部“正则表达式”模块的 (*SKIP) 函数。使用“标准”正则表达式语法是否无法解决?
【问题讨论】:
-
原帖中使用的措辞是'它更方便'使用带有附加功能的
regex模块,而不是没有它就不可能 匹配字符串。所以不可能使用 standard 正则表达式语法来匹配条件?我正在尝试学习正则表达式,所以对确认这一点非常感兴趣。 -
好的,让我们用另一个答案更新线程。
标签: python regex regex-lookarounds