如何用正则提取带前缀操作符的引号内/外搜索术语?
解决方案
正则表达式设计
针对你的需求,我们可以使用以下正则表达式来提取带可选操作符前缀的配对引号内容,同时自动忽略空引号:
([+-]?)\s*(?:"([^"\\]|\\.)+"|'([^'\\]|\\.)+')
正则说明
([+-]?):捕获可选的搜索操作符(+或-),无操作符则返回空字符串。\s*:允许操作符与引号之间存在任意数量的空白字符(兼容-'bob two'或- 'bob two'这类格式)。"([^"\\]|\\.)+":匹配双引号包裹的内容:[^"\\]:匹配除双引号、反斜杠外的任意字符,支持双引号内包含单引号(如"freak'd out")。\\.:匹配转义字符(如\"),支持引号内的转义引号。+:确保内容非空,自动过滤""这类空引号对。
'([^'\\]|\\.)+':匹配单引号包裹的内容,逻辑与双引号部分一致,支持单引号内包含双引号。
代码示例(Python)
以下是使用该正则提取目标内容的示例代码:
import re # 待处理的输入文本 input_text = '+@bob "xxx",\'yyy\', "freak\'d out" -\'bob two\' "" can I #handle/children -#nope @ok(42)' # 编译正则表达式 pattern = re.compile(r'([+-]?)\s*(?:"([^"\\]|\\.)+"|\'([^\'\\]|\\.)+\')') # 提取所有匹配项 results = [] for match in pattern.finditer(input_text): operator = match.group(1) or "" # 取双引号或单引号内的内容(哪个存在取哪个) content = match.group(2) or match.group(3) results.append(f"{operator}{content}") print(results) # 输出结果: ['xxx', 'yyy', "freak'd out", '-bob two']
关键特性验证
- 处理
-'bob two'时,会提取操作符-和内容bob two,拼接为-bob two。 - 自动忽略空引号对
""或''。 - 正确保留引号内的异向引号(如双引号内的单引号
"freak'd out")。 - 支持转义引号(如
"he said \"hi\""会提取为he said "hi")。
内容的提问来源于stack exchange,提问作者JGC
相关产品推荐
相关产品推荐

