我想使用从API返回的字符串(“project”)的一部分。字符串如下所示:
{'Project Title': 'LS003942_EP - 5 Random Road, Sunny Place, SA 5000'}
我想储存'LS003942\U EP…'一个名为foldername
的新变量的一部分。我认为一个好方法是使用正则表达式来查找Title
之后的文本。这是我的密码:
orders = api.get_all(view='Folder', fields='Project Title', maxRecords=1)
for new in orders:
print ("Found 1 new project")
print (new['fields'])
project = (new['fields'])
s = re.search('Title(.+?)', result)
if s:
foldername = s.group(1)
print(foldername)
这给了我一个错误-
TypeError: expected string or bytes-like object.
我希望foldername = 'LS003942_EP - 5 Random Road, Sunny Place, SA 5000'
您可以尝试以下模式:
(?<='Project Title': )[^}]+
。你知道吗说明:它使用正向lookback来确保匹配发生在
'Project Title':
之后。然后匹配,直到遇到}
:[^}]+
。你知道吗Demo
可以使用
ast.literal_eval
安全地计算包含Python文本的字符串:(在我看来)你有一本字典而不是一根弦。考虑到这种情况,您可以尝试:
如果你有时间,看看dictionaries。你知道吗
我认为你不需要这里的
regex
:基本上,我要找到第一个冒号的位置,然后加2得到foldername的起始索引(这将是撇号),然后我使用索引切片,从索引到最后的第二个字符(最后一个撇号)进行切片。你知道吗
但是,如果您的字符串总是以有效的python
dict
的形式出现,您只需执行foldername = (eval(string).values)[0]
。这里,我将您的字符串视为dict
,并从中获取第一个值,这是您所需的foldername
。但是,正如@AKX在注释中所指出的,eval()
是不安全的,因为有人可以将恶意代码作为字符串传递。除非您确定您的输入字符串不会包含代码(这是不可能的),否则最好使用评估()因为它只计算文本。你知道吗但是,正如@MaximilianPeters在评论中指出的那样,您的响应看起来像是一个有效的JSON,因此您可以使用
json.parse()
轻松解析它。相关问题 更多 >
编程相关推荐