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

如何匹配"C"、"C++"或"C#"?求通过pytest的正则表达式

解决方案

可以使用正则表达式 ^C(?:\+\+|#)?$ 来满足所有测试用例的要求,以下是详细说明:

正则表达式拆解

  • ^:锚定字符串起始位置,确保匹配的是整个字符串而非部分子串
  • C:匹配字面量字符 C
  • (?:\+\+|#)?:非捕获分组,包含两种可选匹配规则:
    • \+\+:匹配连续两个加号(加号是正则特殊字符,需用反斜杠转义)
    • #:匹配单个井号
    • ?:表示整个分组是可选的(允许出现0次或1次)
  • $:锚定字符串结束位置,确保没有多余字符

测试用例验证

逐个对应你的测试用例:

  • "C++":C 后接 ++,符合分组规则 → 匹配成功(返回True)
  • "C#":C 后接单个#,符合分组规则 → 匹配成功(返回True)
  • "C+":C 后接单个+,不符合分组内的++要求 → 匹配失败(返回False)
  • "C##":C 后接两个#,不符合分组内的单个#要求 → 匹配失败(返回False)
  • "C":没有后续字符,分组允许0次匹配 → 匹配成功(返回True)

pytest 测试代码示例

import re
import pytest

CPP_CSHARP_REGEX_TEST_CASES = [
    ("C++", True),
    ("C#", True),
    ("C+", False),
    ("C##", False),
    ("C", True),
]

@pytest.mark.parametrize("input_str, expected", CPP_CSHARP_REGEX_TEST_CASES)
def test_cpp_csharp_regex(input_str, expected):
    pattern = r'^C(?:\+\+|#)?$'
    assert bool(re.fullmatch(pattern, input_str)) == expected

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 12:19:55