Source code for qufe.excludebracket

"""
Bracket content removal utilities.

This module provides functions to validate and remove content within brackets
from text strings with proper bracket pairing validation.
"""

import re


[docs] def check_eb(text, open_bracket, close_bracket): """ Validate bracket pairing in text. Args: text (str): The input text to validate open_bracket (str): The opening bracket character close_bracket (str): The closing bracket character Returns: int: 1 if brackets are valid and properly paired, 0 otherwise Raises: None: Returns 0 for any validation failure """ brackets = ('(', ')', '[', ']', '{', '}', '<', '>') # Fail if not valid bracket characters if (open_bracket not in brackets) or (close_bracket not in brackets): return 0 # Check if brackets form a valid pair if not (0 < (ord(close_bracket) - ord(open_bracket)) < 3): return 0 # Check if bracket counts match if text.count(open_bracket) != text.count(close_bracket): return 0 # Check if closing bracket appears before opening bracket if text.find(close_bracket) < text.find(open_bracket): return 0 return 1
[docs] def eb2(text, open_bracket, close_bracket): """ Remove content within brackets from text. Args: text (str): The input text open_bracket (str): The opening bracket character close_bracket (str): The closing bracket character Returns: str: Text with bracket content removed, or 0 if validation fails Example: >>> eb2("Hello (world) test", "(", ")") 'Hello test' """ if not check_eb(text, open_bracket, close_bracket): return 0 # Escape brackets for regex escaped_open = '\\' + open_bracket escaped_close = '\\' + close_bracket # Find all bracket positions re_open = re.compile(escaped_open) re_close = re.compile(escaped_close) open_positions = [m.start() for m in re.finditer(re_open, text)] close_positions = [m.start() for m in re.finditer(re_close, text)] # Check if any closing bracket appears before its opening bracket invalid_order = [1 for (x, y) in zip(open_positions, close_positions) if x > y] if sum(invalid_order): return 0 # Create position pairs for text extraction close_positions.insert(0, -1) open_positions.append(len(text)) # Extract text outside brackets result = [text[start+1:end] for (start, end) in zip(close_positions, open_positions) if (end - start) > 1] return ''.join(result)
[docs] def exclude_bracket_content(text, open_bracket='(', close_bracket=')'): """ Convenience function to remove bracket content with default parentheses. Args: text (str): The input text open_bracket (str): The opening bracket character (default: '(') close_bracket (str): The closing bracket character (default: ')') Returns: str: Text with bracket content removed, or original text if validation fails """ result = eb2(text, open_bracket, close_bracket) return result if result != 0 else text