gpt4 book ai didi

python-3.x - 为什么这个正则表达式不匹配任何东西?

转载 作者:行者123 更新时间:2023-12-04 00:47:01 24 4
gpt4 key购买 nike

我已经尝试了大约两个小时来编写一个正则表达式,该正则表达式匹配前面或后面没有相同字符的单个字符。

这就是我得到的:(\d)(?<!\1)\1(?!\1) ;但它似乎不起作用! (在 https://regex101.com/r/whnj5M/6 测试)

例如:

1111223我希望匹配 3最后,因为它之前或之后都没有另一个 3。

1151223我希望匹配 5在中间,3最后出于与上述相同的原因。

这样做的最终目标是能够在字符串中找到成对(且仅成对)字符(例如,在 11 中找到 112223 或在 44 中找到 123544),我打算尝试并匹配单个孤立的字符,然后添加一个 {2}它可以找到对,但我什至无法找到孤立的字符来匹配!

非常感谢任何帮助,我以为我非常了解 RegEx!

附言我在 regex101.com 上用 JS 进行测试,因为它不允许我在 Python 中使用可变长度回溯,而我正在使用 regex在我的实际实现中允许这样做的库。

最佳答案

您的正则表达式很接近,但是通过简单地使用 (\d) 您正在消耗字符,这会阻止其他匹配项的发生。相反,您可以使用正向先行设置捕获组,然后测试捕获的数字是否未被自身副本包围:

(?=.*?(.))(?<!\1)\1(?!\1)

通过使用前瞻,您可以避免使用任何字符,因此正则表达式可以匹配字符串中的任何位置。

请注意,在 1151223 中,这将返回 513,因为第三个 1 不与任何其他 1 相邻。

Demo on regex101 (需要支持可变宽度lookbehinds的JS)

关于python-3.x - 为什么这个正则表达式不匹配任何东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61706409/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com