mirror of
https://github.com/langchain-ai/langgraph-codeact.git
synced 2026-07-13 14:44:05 -04:00
62 lines
1.7 KiB
Python
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
|