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

正则表达式验证:检测单个未配对双引号及点的合法格式

解决方案

要同时满足「双引号必须成对」和「所有点都在双引号内」的验证需求,可以用两种思路实现:

方法一:直观的分步检测

先检查双引号是否成对,再验证所有点都处于成对的双引号内部:

import re

def is_valid(s):
    # 1. 检查双引号数量是否为偶数(成对)
    quote_num = len(re.findall(r'"', s))
    if quote_num % 2 != 0:
        return False
    
    # 2. 移除所有成对引号内的内容,检查剩余部分是否含未被包裹的点
    stripped_content = re.sub(r'"[^"]*"', '', s)
    if '.' in stripped_content:
        return False
    
    return True

测试示例

# 合法案例
print(is_valid('Don "B." White'))          # True
print(is_valid('Don "M.dom" White'))       # True
print(is_valid('Don "B." White "H." Joe')) # True

# 非法案例
print(is_valid('Don "B. White'))           # False(引号未配对)
print(is_valid('Don "B." White "H Simpson')) # False(引号未配对)
print(is_valid('Don B. White'))            # False(点未被引号包裹)

方法二:单正则全匹配

用一个正则表达式匹配完全合法的字符串,不匹配则说明存在问题:

import re

def is_valid(s):
    pattern = r'^(?:"[^"]*"|[^".])*$'
    return re.fullmatch(pattern, s) is not None

正则说明

  • ^ 和 $:锁定字符串首尾,确保整个内容都符合规则
  • (?:"[^"]*"|[^".])*:重复匹配两种合法片段:
    • "[^"]*":成对的双引号及其内部内容(允许包含点)
    • [^".]:非双引号、非点的普通字符

如果字符串存在未配对的引号,或者有不在引号内的点,都会无法匹配该正则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:23:08