作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我试图在单词列表中找到字符串的所有索引位置,并且我希望将值作为列表返回。如果字符串是单独的,或者它前面或后面有标点符号,我想找到该字符串,但如果它是一个较大单词的子字符串,则不会。
以下代码仅捕获“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/
我是一名优秀的程序员,十分优秀!