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

Python正则表达式:如何将引号内内容视为整体避免拆分?

正则拆分需求:保留引号内内容为整体

现有Python代码如下,其中self.keywords是包含关键词的列表:

escaped_keywords = list(map(re.escape, self.keywords))

joined_keywords = '|'.join(escaped_keywords)

pattern = rf"\b({joined_keywords})\b|([^\w\s])"

temp = re.split(pattern, line)

当前正则处理带引号的字符串(如"hello, world!")时,会拆分成'"', 'hello', ',', 'world', '!', '"',但期望输出为'"', 'hello, world!', '"'——即把双/单引号内的内容视为整体,不拆分其中的符号。此前尝试"(.?)"|'(.?)'未达预期,求正确正则方案。


解决方案

核心是让引号内内容的匹配优先级最高,这样正则会先完整捕获引号里的内容,再处理其他规则。修改后的代码如下:

import re

escaped_keywords = list(map(re.escape, self.keywords))
joined_keywords = '|'.join(escaped_keywords)

# 优先匹配双/单引号内的完整内容,再匹配关键词,最后匹配引号外的符号
pattern = r'"([^"]*)"|\'([^\']*)\'|\b(' + joined_keywords + r')\b|([^\w\s])'

temp = re.split(pattern, line)
# 过滤拆分后产生的空值和None
temp = [item for item in temp if item is not None and item != '']

规则细节

  1. "([^"]*)":匹配双引号内所有内容(到下一个双引号为止),[^"]*确保不会跨引号匹配
  2. \'([^\']*)\':同理匹配单引号内的内容(注意转义单引号避免语法错误)
  3. \b(' + joined_keywords + r')\b:保留原有的关键词独立匹配规则
  4. ([^\w\s]):仅匹配引号外的非单词、非空白字符

效果验证

输入"hello, world!"时,拆分结果为['"', 'hello, world!', '"'],完全符合预期;同时引号外的关键词和符号仍能正常拆分。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:42:36