我最近一直在写一个程序,其中一部分要求我在字符串中获取信息。我需要找到有1个字母的地方,紧接着是2个数字(例如S07),我无法找到它的RegEx。
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)
我知道这个信息在字符串中,但它一直给我“无”回复
(我不太确定代码部分是否格式正确,在预览中它显示在同一行,但我程序中的缩进是正确的)
答案 0 :(得分:3)
您将参数换成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位数部分的括号。
答案 1 :(得分:2)
你的正则表达式只会捕获只包含一个字母和两个数字的字符串,以检查整个字符串是否有多个出现使用这些字符串:
试试这个正则表达式:
[a-zA-Z]\d{2}
<强> INPUT 强>
asdasdasS01asfasfsa
<强>输出强>
S01
如果你想找到一个只包含一个字母后跟两位数的单词,请使用这个正则表达式:
\b[a-zA-Z]\d{2}\b
只有数字才能捕获正则表达式:
[a-zA-Z](\d{2})
<强> INPUT 强>
asdasdasS01asfasfsa
<强>输出强>
01