正则表达式未检测到周期和数字

时间:2019-06-09 19:49:27

标签: python regex

我在https://medium.com/tech-tajawal/regular-expressions-the-last-guide-6800283ac034读到有关正则表达式的信息,但是在尝试做一些非常简单的事情时遇到了麻烦。

s = re.compile('(norm|conv)[.][0-9]')

for k,v in densenet_state_dict.items():
    print(k)
    print(s.findall(k))

应该打印类似norm.2的内容,但它只是检测输出中的范数或转换,而不是句号或数字。

module.features.denseblock4.denselayer16.norm.2.running_mean
['norm']
module.features.denseblock4.denselayer16.norm.2.running_var
['norm']

我什至尝试了'(norm|conv)\.[0-9]'。我错过了一些非常重要的东西吗?


编辑:最低工作示例

module_type = re.compile('(norm|conv)\.[0-9]')
module_name = "module.features.denseblock4.denselayer16.conv.2.weight"
print(module_name)
print(module_type.findall(module_name))

打印

module.features.denseblock4.denselayer16.conv.2.weight
['conv']

2 个答案:

答案 0 :(得分:1)

您的第二个正则表达式看起来不错。如果没有捕获到想要的内容,请尝试:

r'((?:norm|conv)\.[0-9])'

捕获整个事物(?:是一个非捕获组)。这是一个示例:

import re

s = """module.features.denseblock4.denselayer16.norm.2.running_mean
['norm']
module.features.denseblock4.denselayer16.norm.2.running_var
['norm']
"""

print(re.findall(r'((?:norm|conv)\.[0-9])', s)) # => ['norm.2', 'norm.2']

答案 1 :(得分:1)

此表达式可以简单地通过捕获组提取所需的输出:

Foo5
Foo4
Foo6
Foo1
Foo2
Foo3.

Demo

测试

(norm\.[0-9]+|conv\.[0-9]+)

RegEx电路

jex.im可视化正则表达式:

enter image description here