如何构建正则表达式仅移除不含^或-的匹配项的引号
正则表达式实现:移除不含^或-的字符串周围的引号
需求说明
仅移除被"(HTML转义双引号)包裹且内容**不含^或-**的字符串两侧的引号,保留包含这两个字符的字符串的引号。
示例
- 原始字符串:
string = '"Q%LCJ8^1"+"Q%VOD.L"+"Q%LSEG.L[EQ_LIST]MID_PRICE"+"BRT-"'
- 预期结果:
"Q%LCJ8^1"+Q%VOD.L+Q%LSEG.L[EQ_LIST]MID_PRICE+"BRT-"'
正则方案
匹配规则
通过负向预查确保被包裹内容不含^或-,正则表达式如下:
"((?!.*[\^-])[^"]+)"
正则解析
":匹配开头的HTML转义双引号(?!.*[\^-]):负向预查,断言后续内容中不会出现^或-[^"]+:匹配任意非"的字符(即被引号包裹的核心内容)":匹配结尾的HTML转义双引号
替换逻辑
将匹配到的完整部分替换为捕获组内的内容(即去掉前后的"),不同语言的反向引用写法略有差异:
- Python/Java:用
\1引用捕获组 - JavaScript/PHP:用
$1引用捕获组
代码示例(Python)
import re original_str = '"Q%LCJ8^1"+"Q%VOD.L"+"Q%LSEG.L[EQ_LIST]MID_PRICE"+"BRT-"' processed_str = re.sub(r'"((?!.*[\^-])[^"]+)"', r'\1', original_str) print(processed_str)
运行后输出结果与预期完全一致。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

