【发布时间】:2011-03-10 18:56:57
【问题描述】:
是python糊涂了,还是程序员糊涂了?
我有很多这样的行:
some_dict[0x2a] = blah
some_dict[0xab] = blah, blah
我想做的是将十六进制代码转换为全大写,如下所示:
some_dict[0x2A] = blah
some_dict[0xAB] = blah, blah
所以我决定调用正则表达式。通常,我只是使用我的编辑器的正则表达式(xemacs)来执行此操作,但是转换为大写的需要将一个推入 Lisp。 ....好的... Python 怎么样?
所以我整理了一个不起作用的简短脚本。我已经将代码压缩到这个例子中,它也不起作用。在我看来,Python 的正则表达式被代码中的括号弄糊涂了。是我还是 Python?
import fileinput
import sys
import re
this = "0x2a"
that = "[0x2b]"
for line in [this, that]:
found = re.match("0x([0-9,a-f]{2})", line)
if found:
print("Found: %s" % found.group(0))
(我使用的是 () 分组结构,因此我不会将 '0x' 中的 'x' 大写。)
此示例仅打印 0x2a 值,而不是 0x2b。这是正确的行为吗?
我可以通过将匹配表达式更改为:
found = re.match("\[0x([0-9,a-f]{2}\])", line)
但我只是想知道是否有人可以让我了解这里发生了什么。
在 Linux 上运行 Python 2.6.2。
【问题讨论】:
-
您知道
[和]在正则表达式中有特殊含义吗?他们不是只是个字符吗?您正在阅读什么正则表达式文档?我看不到您的'\\[...\\]版本有任何方法。你有什么问题? -
你不需要字符类中的 ,
[0-9a-b]可以正常工作。 -
@FallingBullets:很高兴知道。谢谢!