我有以下字符串:
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.pdf
,qwerty123.pdf
等,并且fo
始终具有以下格式:
fo = "someOptionalstring<otherstring>anotherOptionalString<string>optionalstring<string>mmm.pdf"
strings
(可以为空)和<strings>
(不为空)之间的交替可以是任意数量。我可以找到正则表达式来提取这些值,但最后找不到所需的字符串。
我可以使用使用endswith()
并寻找最后一个>
字符的算法,但是我想尝试使用正则表达式进行学习。
答案 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)