如何将字符串的各个部分提取到单独的字符串中

时间:2015-06-24 01:21:43

标签: python regex string python-3.x

我正在尝试创建一个帮助我调试的函数。当我执行以下操作时:

s = traceback.format_stack()[-2]
print(s)

我得到的控制台输出类似于:

File "/home/path/to/dir/filename.py", line 888, in function_name

如何将filename.py888function_name提取到单独的字符串中?使用正则表达式?

3 个答案:

答案 0 :(得分:1)

您可以尝试使用str.split():

>>> s = 'File "/home/path/to/dir/filename.py", line 888, in function_name'
>>> lst = s.split(',')
>>> lst
['File "/home/path/to/dir/filename.py"', ' line 888', ' in function_name']

因此,对于888和function_name,您可以像这样访问它们

>>> lst[1].split()[1]
>>> '888'

对于filename.py,您可以将其拆分为'"'

>>> fst = lst[0].split('"')[1]
>>> fst
'/home/path/to/dir/filename.py'

然后你可以使用os.path.basename:

>>> import os.path
>>> os.path.basename(fst)
'filename.py'

答案 1 :(得分:1)

尝试使用此正则表达式:

File \"[a-zA-Z\/_]*\/([a-zA-Z]+.[a-zA-Z]+)", line ([0-9]+), in (.*)

您可以尝试使用此网站:https://regex101.com/

答案 2 :(得分:1)

string = 'File "/home/path/to/dir/filename.py", line 888, in function_name'

search = re.search('File (.*), line (.*), in (.*)', string, re.IGNORECASE)
print search.group(1)
print search.group(2)
print search.group(3)