Python代码在print语句后的工作方式不同

时间:2016-09-16 16:20:18

标签: python regex python-2.7

我试图使用正则表达式搜索字典中的键并返回匹配项。以下代码从实际代码中简化,但显示了问题。

#!/bin/python

# Import standard Python modules
import os, sys, string, pdb, re

key=""
pat=""

steps = {"pcb":"xxx","aoi":"xxx","pcb-pec":"xxx","pcb_1":"xxx"}
pat = "pcb"

print"***Search the dict***"
for key in steps:
    print re.search(key,pat)

print"***Search the key***"
key = "pcb-pec"
pat = "pcb"
print re.search(key,pat)

print"***Search the key after printing it***"
key = "pcb-pec"
pat = "pcb"
print 'key:' + key+ ' ,pattern:' + pat
print re.search(pat,key)

exit()

输出是这样的:

***Search the dict***
<_sre.SRE_Match object at 0x00000000031FBC60>
None
None
None
***Search the key***
None
***Search the key after printing it***
key:pcb-pec ,pattern:pcb
<_sre.SRE_Match object at 0x00000000031FBC60>

我不明白为什么在第3和第4个键上找不到这种模式。

我不明白为什么在第二次测试中找不到这种模式。

我真的不明白为什么在第三次测试中发现它与第二次测试相同,但是有一个打印声明。

这是我的第一篇文章,但我通过搜索和阅读在这里学到了很多东西。非常感谢大家。

2 个答案:

答案 0 :(得分:2)

re.search的签名(给定为re.search(pattern, string, flags=0))首先采用模式,然后采用字符串。

您应该交换参数的顺序:

re.search(pat, key)
#         ^^^^^^^^

然后其他键将起作用:

In [27]: pat = "pcb"

In [28]: key = "pcb-pec"

In [29]: re.search(key,pat) # wrong order

In [30]: re.search(pat,key) # right order
Out[30]: <_sre.SRE_Match object; span=(0, 3), match='pcb'>

答案 1 :(得分:2)

您可以在最后一种情况下更改参数的顺序。你前几次没有它们,最后一次是正确的顺序

re.search(pat,key)

是正确的订单。

在循环中,一旦模式和字符串恰好相同,你就会得到一个匹配。

相关问题