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

正则含字符范围时,如何列出匹配及未匹配的所有字符?

如何列出正则表达式匹配/未匹配的所有字符

嘿,这个需求太实用了——给正则允许的字符写规范文档,手动枚举不仅麻烦还容易出错,尤其是这种包含多个字符范围的正则。我给你两个靠谱的方案,不管是要匹配的还是未匹配的字符都能轻松搞定:

一、生成所有匹配的字符

最稳妥的方式是写个小脚本自动遍历检查,毕竟像&-9这种范围对应的是ASCII码38到57,包含了一堆标点、数字,手动列很容易漏。

拿Python举个例子,代码简单直接,你可以直接运行:

import re

# 把你的正则字符集填在这里,注意保持原有的范围规则
target_regex = re.compile(r'[a-f&-9]')
matched_chars = []

# 先遍历ASCII可打印字符(0x20到0x7E,也就是空格到波浪号)
for char_code in range(0x20, 0x7F):
    current_char = chr(char_code)
    # 检查单个字符是否完全匹配正则
    if target_regex.fullmatch(current_char):
        matched_chars.append(current_char)

# 输出结果,也可以写入文件方便整理文档
print("所有匹配的字符:")
print(''.join(matched_chars))
# 如果想要分行显示更清晰,替换成下面的代码:
# for char in matched_chars:
#     print(char)

运行后就能得到准确的匹配字符列表,完全不会出错。

二、生成未匹配的字符

逻辑和上面几乎一致,只需要把判断条件反过来就行,修改一行代码:

if not target_regex.fullmatch(current_char):

这样就能收集到所有不在正则匹配范围内的字符了。

小提醒

  • 如果你对正则里的字符范围有疑问,可以在脚本里加一行print(f"{current_char}: {char_code}"),打印每个字符的ASCII码,验证范围是否符合预期。
  • 如果你的正则涉及Unicode字符(比如中文、特殊符号),可以把遍历范围改成range(0, 0x10FFFF),不过这个范围很大,运行会慢一点,建议根据需求缩小到特定的Unicode区块(比如常用中文范围)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:52:06