【问题标题】:python get substring from regexpython从正则表达式中获取子字符串
【发布时间】:2015-04-21 07:57:07
【问题描述】:

我想从一个字符串中提取一个符合某个正则表达式的子字符串。正则表达式是:

(\[\s*(\d)+ byte(s)?\s*\](\s*|\d|[A-F]|[a-f])+)

这实际上意味着所有这些字符串都被接受:

[4 bytes] 66 74 79 70 33 67 70 35
[ 4 bytes ] 66 74 79 70 33 67 70 35
[1 byte] 66 74 79 70 33 67 70 35

我只想从这个字符串中提取字节数(只是数字)。我想用re.search 来做这件事,但我不确定这是否可行。最干净、最高效的方法是什么?

【问题讨论】:

    标签: python regex substring


    【解决方案1】:

    使用match.group 获取您的正则表达式定义的组:

    import re
    
    s = """[4 bytes] 66 74 79 70 33 67 70 35
    [ 4 bytes ] 66 74 79 70 33 67 70 35
    [1 byte] 66 74 79 70 33 67 70 35"""
    r = re.compile(r"(\[\s*(\d)+ byte(s)?\s*\](\s*|\d|[A-F]|[a-f])+)")
    
    for line in s.split("\n"):
        m = r.match(line)
        if m:
            print(m.group(2))
    

    第一组匹配[4 bytes],第二组只匹配4

    输出:

    4
    4
    1
    

    【讨论】:

    • OP 只想要字节数!
    • @Docteur 改变了这一点。
    • @Tichodroma 非常感谢!
    • @pidgey (\s*|\d|[A-F]|[a-f])+ 应该重写为 [\s\dA-Fa-f]+ 因为你不关心它捕获的内容。
    • @Tichodroma:我把它留在这里,以便您可以考虑将其包含在您的答案中。如果您不想这样做,您可以不理会它。我已经在我的评论中 ping 了 OP。
    猜你喜欢
    • 2017-06-07
    • 2020-05-13
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多