LeetCode 193有效电话号码正则表达式为何失效?加^$才通过?
LeetCode 193. Valid Phone Numbers grep脚本问题解析
为什么必须指定整行匹配?
LeetCode 193的核心要求是筛选出文件中整行完全符合格式的电话号码,而非提取行内的合法号码片段。
第一个脚本没有^(行首)和$(行尾)锚点,grep会匹配行内任意位置的符合模式的子字符串——哪怕行首/行尾有多余字符,或者一行里包含多个号码片段,都会被错误识别为有效结果。而添加锚点后,只有当整行内容完全匹配电话号码格式时才会被选中,严格贴合题目对“有效电话号码行”的定义。
第一个脚本失败的测试用例
测试用例文件 file.txt 内容:
(123) 456-7890 多余文本 123-456-7890abc abc(123) 456-7890 123-456-7890 987-654-3210
第一个脚本的错误输出:
(123) 456-7890 123-456-7890 (123) 456-7890 123-456-7890 987-654-3210
这些输出里的行都不符合“整行是有效电话号码”的要求,但被错误提取了。
第二个脚本的正确输出:
无任何输出(因为所有行都包含多余内容或多个号码,没有纯电话号码行),完全符合题目预期。
另一个更直观的测试用例行:
(123) 456-7890x
第一个脚本会错误提取(123) 456-7890,而第二个脚本会正确忽略这一行——因为行尾的x导致整行不符合格式。
内容的提问来源于stack exchange,提问作者coder
相关产品推荐
相关产品推荐

