@@ -49,28 +49,27 @@ def last_content_without_prompt(data: Dict[str, Any], **params: Dict[str, Any])
4949
5050
5151def _get_pattern_value (pattern_str : str , value_str : str ):
52- literal_text_arr = []
53- field_name_arr = []
54- for literal_text , field_name , _ , _ in string .Formatter ().parse (pattern_str ):
55- literal_text_arr .append (literal_text )
56- if field_name is not None :
57- field_name_arr .append (
58- field_name if field_name else str (len (field_name_arr ))
59- )
60-
61- pattern_values = {}
52+ parts = list (string .Formatter ().parse (pattern_str ))
53+ field_names = [field_name for _ , field_name , _ , _ in parts if field_name is not None ]
54+
55+ pattern_values = {field : '' for field in field_names } # Initialize all fields with empty strings
56+
6257 last_end = 0
63- for i , literal_text in enumerate (literal_text_arr ):
64- start = value_str .find (literal_text , last_end )
65- if i == len (literal_text_arr ) - 1 :
66- end = len (value_str )
67- else :
68- end = value_str .find (literal_text_arr [i + 1 ], start + 1 )
69- if start == - 1 or end == - 1 :
70- break
71- start += len (literal_text )
72- pattern_values [field_name_arr [i ]] = value_str [start :end ]
73- last_end = end
58+ for i , (literal_text , field_name , _ , _ ) in enumerate (parts ):
59+ if literal_text :
60+ start = value_str .find (literal_text , last_end )
61+ if start == - 1 :
62+ break
63+ if i > 0 and field_names [i - 1 ]:
64+ pattern_values [field_names [i - 1 ]] = value_str [last_end :start ].strip ()
65+ last_end = start + len (literal_text )
66+ elif i > 0 and field_name : # Handle consecutive fields
67+ pattern_values [field_names [i - 1 ]] = ''
68+
69+ # Handle the last field if it exists
70+ if field_names and last_end < len (value_str ):
71+ pattern_values [field_names [- 1 ]] = value_str [last_end :].strip ()
72+
7473 return pattern_values
7574
7675
0 commit comments