N-6ren">
gpt4 book ai didi

regex - 嵌套和混合前瞻和后视?

转载 作者:行者123 更新时间:2023-12-01 01:44:33 25 4
gpt4 key购买 nike

例如,我将“字符串开头附近的关键字 foo”定义为以下正则表达式:

(?<=^.{,10})foo

我将“短字符串”定义为这个正则表达式(或等效地,30 个字符或更少):
^(?=.{,30}$)

现在的问题是,我想将“短字符串开头附近的关键字 foo”与一个正则表达式相匹配,但我不确定该怎么做。匹配的文本必须是“foo”,因此应该正确处理周围的文本(使用环视)。

这是我尝试过的,但显然不起作用:
^(?=.{0,30)$)(?<=^.{,10})foo

这个有效但匹配太多文本,我只想要 foo,而不是 aafoo:
^(?=.{0,30)$).{,10}foo

预期输入和输出:
aaaaaaaaaaa => None
aafooaaaaaa => "foo" (at position 2-5)
aaaaaaaaaaafoo => None (Too far from start of string)
aafooaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa => None (String too long)

我正在使用第 3 方 PyPI 包 regex (不是内置的 re )在 Python 3 上。

最佳答案

在lookbehind内部,当您将字符串的开头与^匹配时, 使用lookahead 确保字符串的结尾距离小于30个字符,以免lookbehind中消耗任何字符——那么你可以在lookbehind中消耗最多10个字符得到foo .你可以使用模式

(?<=^(?=.{0,30}$).{,10})foo

看:
pattern = r'(?<=^(?=.{0,30}$).{,10})foo'

# matches
print(regex.search(pattern, 'text foo text'))

# fails, foo is more than 10 characters away from the start of the string:
print(regex.search(pattern, 'text text text foo text'))

# fails, string is more than 30 characters long:
print(regex.search(pattern, 'text foo text long long string long long string long long string long long string'))

输出:
<regex.Match object; span=(5, 8), match='foo'>
None
None

关于regex - 嵌套和混合前瞻和后视?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52232739/

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