ASCII字符与非ASCII字符的正则
private static System.Text.RegularExpressions.Regex regex = new Regex("([\u0000-\uffff])");
private static System.Text.RegularExpressions.Regex cRegex = new Regex("([\u0100-\uffff])");
private static System.Text.RegularExpressions.Regex eRegex = new Regex(([\u0000-\u00ff])");
这三个正则表达式是用来匹配 Unicode 字符 的,它们的作用如下:
1️⃣ regex = new Regex("([\u0000-\uffff])");
解析
\u0000-\uffff:表示 所有的 Unicode 字符(U+0000 到 U+FFFF)。
([\u0000-\uffff]):
方括号 []:表示匹配字符范围。
小括号 ():表示捕获分组(grouping),会将匹配到的字符存入分组。
\u0000:Unicode 编码的起始字符(NULL)。
\uffff:基本多文种平面(BMP,Basic Multilingual Plane)的最后一个字符(特殊字符)。
作用
这个正则匹配 任何单个 Unicode 字符,相当于 .(匹配所有字符,包括中文、英文、特殊符号等)。
匹配示例
"A"
"汉"
"你"
""
""
"\n"
️ 注意:
这个正则只能匹配 Unicode BMP 平面(U+0000 ~ U+FFFF),无法匹配 U+10000 及以上的字符(如 、 这样的增补字符)。
如果想匹配完整的 Unicode,应该使用 RegexOptions.Singleline 或者 \p{L} 等 Unicode 字符分类。
2️⃣ cRegex = new Regex("([\u0100-\uffff])");
解析
\u0100-\uffff:匹配 U+0100 及以上的字符(非 ASCII 但仍在 BMP 内的字符)。
([\u0100-\uffff]):
只匹配 U+0100 ~ U+FFFF 之间的字符(跳过 U+0000 ~ U+00FF)。
也就是跳过了 ASCII 及扩展 ASCII(U+0000 ~ U+00FF),仅匹配 非 ASCII 的 Unicode 字符。
作用
匹配中文、日文、韩文、阿拉伯文等非 ASCII 语言字符。
不会匹配 ASCII 字符(如 A-Z, a-z, 0-9, 标点符号)。
不会匹配扩展 ASCII(西欧特殊符号,如 é, ñ, ü)。
匹配示例
"汉"
"你"
""
""
"é" (U+00E9,在 ASCII 扩展范围内)
"A" (U+0041,在 ASCII 范围内)
3️⃣ eRegex = new Regex("([\u0000-\u00ff])");
解析
\u0000-\u00ff:匹配 U+0000 到 U+00FF 之间的字符(即 ASCII + 扩展 ASCII)。
([\u0000-\u00ff]):
只匹配 基本 ASCII + 扩展 ASCII,不会匹配 U+0100 以上的 Unicode 字符。
作用
匹配 ASCII(U+0000 ~ U+007F):
A-Z, a-z, 0-9, 标点符号(.,;!?)。
匹配扩展 ASCII(U+0080 ~ U+00FF):
法语、西班牙语、德语等拉丁字符(é, ñ, ü, ç)。
部分特殊符号。
匹配示例
"A"
"9"
","
"é" (U+00E9,在扩展 ASCII 内)
"汉" (U+6C49,不在 U+00FF 内)
"你" (U+4F60,不在 U+00FF 内)
综述
代码示例
using System;
using System.Text.RegularExpressions;
class Program
{
private static Regex regex = new Regex("([\u0000-\uffff])"); // 所有 Unicode
private static Regex cRegex = new Regex("([\u0100-\uffff])"); // 仅非 ASCII
private static Regex eRegex = new Regex("([\u0000-\u00ff])"); // 仅 ASCII 和扩展 ASCII
static void Main()
{
string test1 = "Hello 世界!";
string test2 = "École française";
string test3 = "123456";
Console.WriteLine($"regex ({test1}): {regex.IsMatch(test1)}"); // true
Console.WriteLine($"cRegex ({test1}): {cRegex.IsMatch(test1)}"); // true (匹配 "世界")
Console.WriteLine($"eRegex ({test1}): {eRegex.IsMatch(test1)}"); // true (匹配 "Hello")
Console.WriteLine($"regex ({test2}): {regex.IsMatch(test2)}"); // true
Console.WriteLine($"cRegex ({test2}): {cRegex.IsMatch(test2)}"); // false ("É" 在 U+00FF 内)
Console.WriteLine($"eRegex ({test2}): {eRegex.IsMatch(test2)}"); // true
Console.WriteLine($"regex ({test3}): {regex.IsMatch(test3)}"); // true
Console.WriteLine($"cRegex ({test3}): {cRegex.IsMatch(test3)}"); // false (全是 ASCII)
Console.WriteLine($"eRegex ({test3}): {eRegex.IsMatch(test3)}"); // true
}
}
结论
regex([\u0000-\uffff]):匹配所有 Unicode 字符。
cRegex([\u0100-\uffff]):匹配非 ASCII Unicode 字符(如中文、日文、韩文)。
eRegex([\u0000-\u00ff]):匹配ASCII 和扩展 ASCII(如英文、数字、西欧字符)。
如果你需要匹配中文字符,应该使用:
Regex chineseRegex = new Regex("([\u4E00-\u9FFF])");
// 匹配中文字符
ASCII字符与非ASCII字符的正则的更多相关文章
- python删除所有的中文字符、非ASCII或非英文字符,检查字符串是否包含非ASCII
Your ''.join() expression is filtering, removing anything non-ASCII; you could use a conditional exp ...
- 转载:字符编码简介 ASCII UTF-8 ISO8859-1
字符编码简介 ASCII UTF-8 ISO8859-1 博客分类: 电脑综合知识 XP数据结构Windows 计算机中的一切都是以数字来表示的,字符同样如此.字符编码就是将字符集编码成为数字序列, ...
- 正则表达式 去除所有非ASCII字符
需求: 去除字符串中包含的所有外国字符 只能使用正则如下,找到包含非ASCII的记录 db=# select * from test where info ~ '[^(\x00-\x7f)]'; id ...
- ASCII 非打印字符
项目出了问题,因为AscII非打印字符的原因,后来找了一下啊ASCII的非打印字符,总共有31个,然后我们直接全部替换成问号了. 解决方式为先找到非打印字符,这是我从网上找的非打印字符表: 进制 十六 ...
- CSS非ASCII字符最佳实践
问题场景 在写样式时经常需要用到非ASCII字符的属性值,如下: ? 1 2 3 4 5 6 7 8 9 10 11 .hot_list .sign_discount:before { cont ...
- ASCII,Unicode和UTF-8字符编码
ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte).也就是 ...
- 字符编码(ASCII、ANSI、GB2312、UTF-8等)系统梳理
引言 在显示器上看见的文字.图片等信息在电脑里面其实并不是我们看见的样子,即使你知道所有信息都存储在硬盘里,把它拆开也看不见里面有任何东西,只有些盘片.假设,你用显微镜把盘片放大,会看见盘片表面凹凸不 ...
- 中文乱码之《字符编码:ASCII,Unicode 和 UTF-8》
参考文献:字符编码笔记:ASCII,Unicode 和 UTF-8 一.ASCII 码 我们知道,计算机内部,所有信息最终都是一个二进制值.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就 ...
- 字符编码中ASCII、Unicode和UTF-8的区别
1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte). ...
- 字符编码(ASCII、ANSI、GB2312、UTF-8等)系统梳理(转载)
引言 在显示器上看见的文字.图片等信息在电脑里面其实并不是我们看见的样子,即使你知道所有信息都存储在硬盘里,把它拆开也看不见里面有任何东西,只有些盘片.假设,你用显微镜把盘片放大,会看见盘片表面凹凸不 ...
随机推荐
- Python 潮流周刊#90:uv 一周岁了,优缺点分析(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- Linux Vim 最全面教程:从入门到精通
一.引言 Vim 是一款功能强大且在 Linux 系统中广泛使用的文本编辑器.它有着高效的编辑模式.丰富的快捷键以及众多强大的功能,对于想要深入学习 Linux 系统操作以及进行文本处理相关工作的新手 ...
- Kafka - server.properties参数详解
server.properties #broker的全局唯一编号,不能重复 broker.id=0 #用来监听链接的端口(kafka端口号),producer或consumer将在此端口建立连接 po ...
- 在 Visual Studio 上体验腾讯云 AI 代码助手
本文以以 Visual Studio 2022 为例. 第一步 安装[腾讯云 AI 代码助手] 打开以 Visual Studio 2022,依次点击工具栏中的-** 扩展 - ** 管理扩展 ,在 ...
- centos使用gcc编译c++源码文件(*.cpp)
1.检查gcc是否安装 输入g++如提示:g++: fatal error: no input files说明已经安装gcc环境 2.安装gcc环境,如已经安装略过此步骤 yum install gc ...
- Educational Codeforces Round 175 (Rated for Div. 2) 比赛记录
Educational Codeforces Round 175 (Rated for Div. 2) 比赛记录 比赛连接 手速场,上蓝场,但是有点唐,C 想错了写了半个多小时,想到正解不到 \(10 ...
- python os.walk函数
os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下. root 所指的是当前正在遍历的这个文件夹的本身的地址 dirs 是一个 list ,内容是该文件夹中所有的目录的名 ...
- Web前端入门第 13 问:HTML 标签和属性是否区分大小写?
HELLO,这里是大熊学习前端开发的入门笔记. 本系列笔记基于 windows 系统. 注意:以下截图都来源于 Chrome 浏览器,不同浏览器可能会产生不同的渲染结果. 思考一个问题:英文写法都分大 ...
- mysql基础中的基础 函数
前段时间b站看sql基础语法,在此做一总结 1.基本函数 mysql中的函数基本可以分为单行函数和分组函数,单行函数用于处理单个的数据,分组函数则是传输一组值过去进行处理.单行函数有可分为字符函数,数 ...
- vim中文乱码 vim字符集设置
vim中文乱码 vim字符集设置 vim的设置一般放在/etc/vimrc文件中,不过,建议不要修改它.可以修改~/.vimrc文件(默认不存在,可以自己新建一个),写入所希望的设置. set fil ...