@@ -49,28 +49,27 @@ def last_content_without_prompt(data: Dict[str, Any], **params: Dict[str, Any])
49
49
50
50
51
51
def _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
+
62
57
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
+
74
73
return pattern_values
75
74
76
75
0 commit comments