我最近一直在编写程序,其中一部分需要我在字符串中获取信息。我需要找到立即有1个字母后跟2个数字的位置(例如S07),我无法为此计算正则表达式。
def get_season(filenames):
pattern = "^[a-zA-z]{1}[\d]{2}$"
found = re.search(filenames[0], pattern)
season_name = found.string
season = season_name[1:3]
print(season)
我知道此信息在字符串中,但它始终给我“无”响应
(我不太确定代码部分的格式是否正确,在预览中它显示为同一行,但是程序中的缩进是正确的)
您将参数交换为re.search()
。第一个参数是模式,而不是要匹配的字符串:
found = re.search(pattern, filenames[0])
您的图案也太宽;A-z
也匹配Z
(大写)和a
(小写)之间的所有内容。正确的模式是:
pattern = "^[a-zA-Z]\d{2}$"
{1}
默认值在哪里,所以我省略了。
如果将其与文件名进行匹配,则可能不想使用开始或结束锚,这将仅将匹配限制为精确的字符串:
>>> re.search("^[a-zA-Z]\d{2}$", "S07").string
'S20'
>>> re.search("^[a-zA-Z]\d{2}$", "S07E01 - Meet the New Boss.avi") is None
True
>>> re.search("^[a-zA-Z]\d{2}$", "S07E01 - Meet the New Boss.avi") is None
True
>>> re.search("[a-zA-Z]\d{2}", "S07E01 - Meet the New Boss.avi").string
'S07E01 - Meet the New Boss.avi'
而且您想用来.group()
获取匹配的部分,而不是string
(这是原始输入字符串):
>>> re.search("[a-zA-Z]\d{2}", "S07E01 - Meet the New Boss.avi").group()
'S07'
如果只需要数字,则需要添加一个组,然后选择该组。使用括号创建捕获组:
>>> re.search("[a-zA-Z](\d{2})", "S07E01 - Meet the New Boss.avi").group(1)
'07'
这将选择第一组(.group(1)
),即2位数字部分周围的括号。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句