gpt4 book ai didi

python - 如何在 Python 的列表理解中使用正则表达式?

转载 作者:太空狗 更新时间:2023-10-29 19:34:50 27 4
gpt4 key购买 nike

我试图在单词列表中找到字符串的所有索引位置,并且我希望将值作为列表返回。如果字符串是单独的,或者它前面或后面有标点符号,我想找到该字符串,但如果它是一个较大单词的子字符串,则不会。

以下代码仅捕获“cow”,而遗漏了“test;cow”和“cow”。

myList = ['test;cow', 'one', 'two', 'three', 'cow.', 'cow', 'acow']
myString = 'cow'
indices = [i for i, x in enumerate(myList) if x == myString]
print indices
>> 5

我尝试更改代码以使用正则表达式:

import re
myList = ['test;cow', 'one', 'two', 'three', 'cow.', 'cow', 'acow']
myString = 'cow'
indices = [i for i, x in enumerate(myList) if x == re.match('\W*myString\W*', myList)]
print indices

但这给出了一个错误:预期的字符串或缓冲区

如果有人知道我做错了什么,我会很高兴听到。我觉得这与我在期望字符串时尝试在其中使用正则表达式这一事实有关。有解决办法吗?

我正在寻找的输出应该是:

>> [0, 4, 5]

谢谢

最佳答案

您不需要将match 的结果赋值给x。你的比赛应该在 x 而不是 list

此外,您需要使用 re.search 而不是 re.match,因为您的正则表达式模式 '\W*myString\W*' 将不匹配第一个元素。那是因为 test; 没有被 \W* 匹配到。实际上,您只需要测试紧随其后和前面的字符,而不是完整的字符串。

因此,您可以在字符串周围使用单词边界:

pattern = r'\b' + re.escape(myString) + r'\b'
indices = [i for i, x in enumerate(myList) if re.search(pattern, x)]

关于python - 如何在 Python 的列表理解中使用正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14819164/

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