gpt4 book ai didi

Python - 不理解此串联正则表达式模式的返回结果

转载 作者:行者123 更新时间:2023-11-28 21:58:05 26 4
gpt4 key购买 nike

我是一个 Python 新手,想要更多地了解正则表达式。就在我认为我已经很好地掌握了基础知识时,有些事情让我震惊 - 例如以下内容:

>>> import re

>>> text = "Some nouns like eggs egg bacon what a lovely donkey"
>>> noun_list = ['eggs', 'bacon', 'donkey', 'dog']
>>> noun_patt = r'\s' + '|'.join(noun_list) + r'\s'
>>> found = re.findall(noun_patt, text)
>>> found
[' eggs', 'bacon', 'donkey']

由于我将正则表达式模式设置为查找 'whitespace' + 'pipe joined list of nons' + 'whitespace' - 为什么会这样:

'eggs' 之前有一个空格而不是后面有空格?发现 'bacon' 两边都没有空格?'donkey' 被发现两边都没有空格,事实上它后面没有空格?

我期待的结果:['eggs', 'bacon']

我正在使用 Python 2.7

最佳答案

你误解了模式。名词联合列表周围没有组,因此第一个 \seggs 选项的一部分,bacon donkey 选项没有空格,dog 选项包含最后的 \s 元字符。

您想在名词周围放置一个组来界定 | 选项适用于什么:

noun_patt = r'\s(?:{})\s'.format('|'.join(noun_list))

此处的非捕获组 ((?:...)) 限制了 | 选项应用于\s 空格现在位于组之外,因此不属于 4 个选项。

您需要使用非捕获组,因为如果您要使用常规(捕获)组,.findall() 将只返回名词,而不是空格。

演示:

>>> text = "Some nouns like eggs egg bacon what a lovely donkey"
>>> import re
>>> text = "Some nouns like eggs egg bacon what a lovely donkey"
>>> noun_list = ['eggs', 'bacon', 'donkey', 'dog']
>>> noun_patt = r'\s(?:{})\s'.format('|'.join(noun_list))
>>> re.findall(noun_patt, text)
[' eggs ', ' bacon ']

现在两个空格都是输出的一部分。

关于Python - 不理解此串联正则表达式模式的返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19039475/

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