Files
langgraph-codeact/langgraph_codeact/utils.py
T
2025-04-05 12:24:48 -04:00

62 lines
1.7 KiB
Python

import re
BACKTICK_PATTERN = r"(?:^|\n)```(.*?)(?:```(?:\n|$))"
def extract_and_combine_codeblocks(text: str) -> str:
"""
Extracts all codeblocks from a text string and combines them into a single code string.
Args:
text: A string containing zero or more codeblocks, where each codeblock is
surrounded by triple backticks (```).
Returns:
A string containing the combined code from all codeblocks, with each codeblock
separated by a newline.
Example:
text = '''Here's some code:
```python
print('hello')
```
And more:
```
print('world')
```'''
result = extract_and_combine_codeblocks(text)
Result:
print('hello')
print('world')
"""
# Find all code blocks in the text using regex
# Pattern matches anything between triple backticks, with or without a language identifier
code_blocks = re.findall(BACKTICK_PATTERN, text, re.DOTALL)
if not code_blocks:
return ""
# Process each codeblock
processed_blocks = []
for block in code_blocks:
# Strip leading and trailing whitespace
block = block.strip()
# If the first line looks like a language identifier, remove it
lines = block.split("\n")
if lines and (not lines[0].strip() or " " not in lines[0].strip()):
# First line is empty or likely a language identifier (no spaces)
block = "\n".join(lines[1:])
processed_blocks.append(block)
# Combine all codeblocks with newlines between them
combined_code = "\n\n".join(processed_blocks)
return combined_code