使用Python 2.7.13在字符串末尾匹配正则表达式

时间:2018-09-03 16:40:39

标签: regex python-2.7

我有以下字符串:

fo = "b---00b<do:YYYY>tftt_<fd>-<fd><ct><ct:MM>mmm.pdf"

我只想得到mmm.pdf

当我尝试:

match = re.search(r'(>.*?\.pdf)', fo)

for g in match.groups():
    print g

我得到:

>tftt_<fd>-<fd><ct><ct:MM>mmm.pdf

我虽然?符号会使搜索在第一个>处停止,但是模式(>.*\.pdf)却给了我相同的结果。 哪个正确的正则表达式可以获取mmm.pdf

mmm.pdf可以是abcs.pdfqwerty123.pdf等,并且fo始终具有以下格式:

fo = "someOptionalstring<otherstring>anotherOptionalString<string>optionalstring<string>mmm.pdf"

strings(可以为空)和<strings>(不为空)之间的交替可以是任意数量。我可以找到正则表达式来提取这些值,但最后找不到所需的字符串。

我可以使用使用endswith()并寻找最后一个>字符的算法,但是我想尝试使用正则表达式进行学习。

2 个答案:

答案 0 :(得分:2)

改为使用[^>]*\.pdf

其中[^>]*表示0或更多不是>的任何字符

fo = "b---00b<do:YYYY>tftt_<fd>-<fd><ct><ct:MM>mmm.pdf"
match = re.search(r'([^>]*\.pdf)', fo)
for g in match.groups():
    print g   

输出:

mmm.pdf     

答案 1 :(得分:0)

如果在点之前始终有3个字符,这也将起作用。 match = re.search('>(。{3} \。pdf)',fo)