Python 正则表达式被方括号 ([]) 混淆了?

标签 python regex

<分区>

是python糊涂了,还是程序员糊涂了?

我有很多这样的台词:

some_dict[0x2a] = blah
some_dict[0xab] = blah, blah

我想做的是将十六进制代码转换为全部大写,如下所示:

some_dict[0x2A] = blah
some_dict[0xAB] = blah, blah

所以我决定调用正则表达式。通常,我只是使用我的编辑器的正则表达式 (xemacs) 来执行此操作,但是转换为大写的需要将一个插入了 Lisp。 ....ok... 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。

最佳答案

re.match 从字符串的 start 开始匹配。使用 re.search 来“匹配字符串中任何地方的第一次出现”。文档中关于此的关键位是 here .

关于Python 正则表达式被方括号 ([]) 混淆了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3160590/

相关文章:

Python请求发布被服务器阻止

python - 是否可以让 PySide 的 QUIloader 像 PyQt 的 uic.loadUi 一样工作?

python - 如何为弹跳球创建碰撞检测?

java - 具有多个前导和尾随 1 和 0 的字符串的正则表达式模式

php - 将匹配 PHP 变量但不匹配对象和函数调用的正则表达式

python - 在 django orm 过滤器中强制比较 CharField 的数值

python - 生成动态嵌套的 JSON 对象和数组 - python

java - 字符串替换正则表达式

如果字符串未夹在两个标记之间则要匹配的正则表达式

regex - matlab正则表达式检查脚本中是否设置了变量