使用RegEx查找1个字母和2个数字

时间:2013-11-15 14:13:26

标签: python regex python-3.x

我最近一直在写一个程序,其中一部分要求我在字符串中获取信息。我需要找到有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)

我知道这个信息在字符串中,但它一直给我“无”回复

(我不太确定代码部分是否格式正确,在预览中它显示在同一行,但我程序中的缩进是正确的)

2 个答案:

答案 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


<小时/>
同时交换 serach 方法中的参数。