我输出了字符串,我需要解析一个特定的文件名:
>>> a = "Warning: do not enter your password if anyone else has superuser privileges or access to your account. [1] 15:04:16 [SUCCESS] 1.1.1.1 abc330b125.tar.bz2 my-libs.tar.bz2 xyz-notok-0.tar.gz Stderr: Could not create directory '/usr/share/httpd/.ssh'. Failed to add the host to the list of known hosts (/usr/share/httpd/.ssh/known_hosts)."
我尝试了这一点,但我没有获得abc330b125.tar.bz2
,而是获得了bs.tar.bz2
:
>>> re.findall(r'.*([abc|xyz\-ok|!my].*.tar.bz2)', a)
['bs.tar.bz2']
如果我在这里犯了任何错误,有人可以告诉我吗?
答案 0 :(得分:0)
我得到了答案:
>>> re.findall(r'(?:abc.*\d+.tar.bz2|xyz\-ok.*.tar.bz2)', a)
['abc330b125.tar.bz2']
答案 1 :(得分:0)
您可以使用此正则表达式:
re.findall(r"[\w-]+\.tar.bz2",a)
# ['abc330b125.tar.bz2', 'my-libs.tar.bz2']
如果你想要所有的文件名,你可以这样做:
re.findall(r"[\w-]+\.tar.(bz2|gz)",a)
# ['abc330b125.tar.bz2', 'my-libs.tar.bz2', 'xyz-notok-0.tar.gz' ]
答案 2 :(得分:0)
您正在使用“findall”,因此我假设您要查找所有tar文件。如果是这样的话,这将有效:
re.findall('\S*\.tar\.bz2', a)
['abc330b125.tar.bz2', 'my-libs.tar.bz2']
如果你只想找到以“abc”开头的,只包含字母和数字的那些,你可以使用这个:
re.findall('abc\w*\.tar\.bz2', a)
['abc330b125.tar.bz2']
答案 3 :(得分:-1)
我尝试使用regex101.com(用于测试正则表达式的真棒网站)进行一些测试,看起来这个正则表达式:
[a-zA-Z0-9-_]*(.)(tar)(.)(bz2)
捕捉你所要求的东西。
我相信你已经知道,但对于任何想要澄清的人来说:抓住实际的“。”在字符串中,您需要将它们括在括号中。
希望这有帮助!