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

如何修改正则表达式以捕获引号内外内容分组(Python环境)

解决正则捕获问题:提取引号包裹内容和普通文本块

你的问题在于原正则只覆盖了开头到双引号的内容+双引号字符串,以及单引号字符串,漏掉了中间的普通文本asdf。我们需要设计一个能匹配三种内容块的正则:双引号包裹的字符串、单引号包裹的字符串,以及非引号的文本块(包括带空格的开头部分和中间的单个单词)。

解决方案代码

在Python中,你可以用这个正则配合re.findall来实现需求:

import re

input_str = 'testing my regex "testing 1234" asdf \'asdfasd\''
# 正则匹配规则:优先匹配引号包裹的内容,再匹配非引号的文本块
pattern = r'"[^"]*"|\'[^\']*\'|[^"\']+'
# 获取所有匹配项
raw_matches = re.findall(pattern, input_str)
# 清理每个匹配项的前后空白,过滤空字符串
final_groups = [match.strip() for match in raw_matches if match.strip()]

print(final_groups)
# 输出结果:['testing my regex', '"testing 1234"', 'asdf', "'asdfasd'"]

正则解释

  • "[^"]*":匹配双引号包裹的内容,[^"]*表示匹配任意非双引号的字符(0次或多次)
  • \'[^\']*\':匹配单引号包裹的内容,逻辑和双引号的规则一致
  • [^"\']+:匹配任意非引号的字符(1次或多次),用来捕获普通文本块

为什么原正则不行?

原正则(^[^"]*)"([^"]*)"|'([^']*)'是两个分支的逻辑:要么匹配开头到第一个双引号的内容+双引号里的内容,要么匹配单引号里的内容。中间的asdf既不属于第一个分支的后续部分,也不属于第二个分支,所以被遗漏了。

额外说明

如果你的文本中存在引号嵌套(比如双引号里有单引号,或者反之),这个基础正则会失效,但根据你的示例文本,这个方案完全适用。如果需要处理嵌套引号,我们可以再调整正则逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:27:40