【问题标题】:Python code working differently after a print statement打印语句后 Python 代码的工作方式不同
【发布时间】:2016-09-16 16:20:17
【问题描述】:

我正在尝试使用正则表达式来搜索字典中的键并返回匹配项。下面的代码是从真实代码简化而来的,但显示了问题。

#!/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 键上找不到该模式。

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

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

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

【问题讨论】:

  • print re.search(pat, key)
  • 有时是re.search(key,pat),有时是re.search(pat,key)

标签: python regex python-2.7


【解决方案1】:

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'>

【讨论】:

    【解决方案2】:

    您在最后一个案例中更改了参数的顺序。前几次你把它们弄乱了,最后一次是正确的顺序

    re.search(pat,key)
    

    是正确的顺序。

    在循环中,当模式和字符串碰巧相同时,您会得到一个匹配项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-04
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 2020-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多