如何匹配"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
相关产品推荐
相关产品推荐

