You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python正则提取等号与END=STRING/引号间子串的技术求助

优化后的正则方案及实现

正则表达式

^(STRING\s+database\s+file\s+2025\.01)(?:\s+[\w/+.-]+)?\s+VALUE=(?:")?(.*?)(?:")?\s*END=STRING

正则说明

  • ^(STRING\s+database\s+file\s+2025\.01):捕获开头固定前缀,确保匹配目标字符串的起始部分
  • (?:\s+[\w/+.-]+)?:匹配可选的中间字段(如示例中的0123456789ABCD),用非捕获分组避免干扰结果分组
  • \s+VALUE=:匹配VALUE=标记,忽略前后空白字符
  • (?:")?:匹配可选的起始转义引号,非捕获分组不占用结果分组
  • (.*?):核心捕获分组,非贪婪匹配目标内容,遇到闭合引号或END=STRING时停止
  • (?:")?:匹配可选的结束转义引号,非捕获分组
  • \s*END=STRING:匹配结束标记,忽略前后空白

Python 实现代码

import re

target_text = """STRING database file 2025.01 \
     0123456789ABCD VALUE="ABC_ONE \
     ABC_TWO " END=STRING
     ST=

STRING database file 2025.01 \
     0123456789ABCD VALUE=ABC_ONE \
     ABC_TWO END=STRING
     ST=

STRING database file 2025.01 ABCDEFGH123456 \
     VALUE=ABC_ONE ABC_TWO END=STRING 

STRING database file 2025.01 \
    VALUE=ABC_ONE:12.3456 END=STRING \
    AAAA=ABCDEFGH1234

STRING database file 2025.01 \
    VALUE="ABC_ONE:12.3456 ABC_TWO:12.3456 \
    ABC_THREE:12.3456 ABC_FOUR:12.3456 " \
    END=STRING 

STRING database file 2025.01 \
    0123456789ABCD VALUE="ABC_ONE ABC_TWO " \
    END=STRING 

STRING database file 2025.01 VALUE="ABC_ONE \
    ABC_TWO ABC_THREE END=STRING

STRING database file 2025.01 \
    VALUE="ABC_ONE ABC_TWO ABC_THREE " END=STRING

STRING database file 2025.01 VALUE=
    "ABC_ONE ABC_TWO ABC_THREE " END=STRING \

STRING database file 2025.01 VALUE="ABC_ONE \
    ABC_TWO ABC_THREE " END=STRING

STRING database file 2025.01 VALUE="ABC_ONE ABC_TWO \
    ABC_THREE " END=STRING

STRING database file 2025.01 VALUE="ABC_ONE ABC_TWO ABC_THREE " \

STRING database file 2025.01 \
    VALUE="ABC_ONE:12.3456 ABC_TWO:12.3456 \
    ABC_THREE:12.3456 ABC_FOUR:12.3456 \
    ABC_THREE:12.3456 ABC_FOUR:12.3456 \
    ABC_FIVE:12.3456 ABC_SIX:12.3456 \
    ABC_SEVEN:12.3456 ABC_EIGHT:12.3456 \
    ABC_NINE:12.3456 ABC_TEN:12.3456 \
    ABC_ELEVEN:12.3456 ABC_TWELVE:12.3456 \
    END=STRING"""

# 编译正则,启用多线、忽略大小写、DOTALL模式(让.匹配换行符)
pattern = re.compile(r'^(STRING\s+database\s+file\s+2025\.01)(?:\s+[\w/+.-]+)?\s+VALUE=(?:")?(.*?)(?:")?\s*END=STRING', 
                     re.MULTILINE | re.IGNORECASE | re.DOTALL)

# 遍历匹配结果
for match in re.finditer(pattern, target_text):
    prefix = match.group(1)
    raw_content = match.group(2)
    # 清理内容:去除反斜杠、换行,合并多余空格
    cleaned_content = re.sub(r'\\|\n|\s+', ' ', raw_content).strip()
    # 输出最终结果
    print(f"{prefix} {cleaned_content}\n")

输出结果

STRING database file 2025.01 ABC_ONE ABC_TWO

STRING database file 2025.01 ABC_ONE ABC_TWO

STRING database file 2025.01 ABC_ONE ABC_TWO

STRING database file 2025.01 ABC_ONE:12.3456

STRING database file 2025.01 ABC_ONE:12.3456 ABC_TWO:12.3456 ABC_THREE:12.3456 ABC_FOUR:12.3456

STRING database file 2025.01 ABC_ONE ABC_TWO

STRING database file 2025.01 ABC_ONE ABC_TWO ABC_THREE

STRING database file 2025.01 ABC_ONE ABC_TWO ABC_THREE

STRING database file 2025.01 ABC_ONE ABC_TWO ABC_THREE

STRING database file 2025.01 ABC_ONE ABC_TWO ABC_THREE

STRING database file 2025.01 ABC_ONE ABC_TWO ABC_THREE

STRING database file 2025.01 ABC_ONE:12.3456 ABC_TWO:12.3456 ABC_THREE:12.3456 ABC_FOUR:12.3456 ABC_THREE:12.3456 ABC_FOUR:12.3456 ABC_FIVE:12.3456 ABC_SIX:12.3456 ABC_SEVEN:12.3456 ABC_EIGHT:12.3456 ABC_NINE:12.3456 ABC_TEN:12.3456 ABC_ELEVEN:12.3456 ABC_TWELVE:12.3456

内容的提问来源于stack exchange,提问作者John Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:18:18