我在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']
答案 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)