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

如何修正正则表达式以正确校验指定模式的字符串?

正则表达式问题分析与修正

你的正则有两个核心问题,导致无法正确校验所有测试用例:

1. \w包含下划线,导致结尾多段字符串被误判有效

原正则结尾的\w+会匹配包含下划线的字符序列(因为\w等价于[A-Za-z0-9_]),所以像cdc_char4ec_pits这种带下划线的多段内容会被\w+完全匹配,不符合你“最后以一段无下划线的字符结尾”的要求。

2. 硬编码了username,无法匹配其他合法字段

原正则里写死了_src_username_,但你需要匹配的是username、password、conn_url这类不同的字段,所以这里需要改成可选的分组来覆盖所有合法字段。


修正后的正则表达式

usr_pat = r"^\$\w+_src_(username|password|conn_url)_[A-Za-z0-9]+$"

各部分解释:

  • ^:匹配字符串开头
  • \$:匹配开头的$符号
  • \w+:匹配开头的任意字母数字下划线序列(比如ini)
  • _src_:固定匹配中间的_src_字符串
  • (username|password|conn_url):匹配允许的字段名,用|分隔所有合法选项
  • _:字段名和结尾部分的分隔符
  • [A-Za-z0-9]+:只匹配字母数字(不含下划线),确保结尾是单一无下划线的段
  • $:匹配字符串结尾

测试验证

用你的测试字符串$ini_src_username_cdc_char4ec_pits测试,修正后的正则会返回ERROR,符合你的预期。同时所有给出的有效输入都会被正确识别,无效输入(结尾多段、开头无$、中间多_smi_等)都会被拦截。

完整测试代码:

import re

usr_pat = r"^\$\w+_src_(username|password|conn_url)_[A-Za-z0-9]+$"

test_cases = [
    # 有效输入
    "$ini_src_usrname_ajkc2e",
    "$ini_src_password_ajkc2e",
    "$ini_src_conn_url_ajkc2e",
    # 无效输入
    "$ini_src_usrname_ajkc2e_chan4",
    "$ini_src_password_ajkc2e_tst1",
    "$ini_smi_src_conn_url_ajkc2e_tst2",
    "ini_smi_src_conn_url_ajkc2e_tst2",
    "$ini_src_usrname_ajkc2e_chan4_jpn3",
    # 你的测试用例
    "$ini_src_username_cdc_char4ec_pits"
]

for u_name in test_cases:
    m = re.match(usr_pat, u_name)
    if m:
        print("Valid username:", m.group())
    else:
        print("ERROR: Invalid user_name:\n", u_name)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:45:17