正则表达式 用横杠连接三段中文 限定字符数量与格式 ,当用英文横杠连接三段中文时,第三段不限量,why???

巅峰的路上 2020-10-22 11:31:31
折腾了两个小时,本以为完美的表达式,结果……。
用横杠连接三段中文,两种情况:
1、英文杠 2、中文杠

字字-字字-字字字字字, 这是中文杠,运行OK;
字字-字字-字字字字字 这是英文杠,只有第三段不限量,可以是0~任意个字
限定字符数量与格式 ,当用英文横杠连接三段中文时,仅有第三段不限量,why???



    private void btn_Validate_Click(object sender, EventArgs e)
{
if (!IsChinese(textBox1.Text.Trim()))//验证字符串是否为汉字
{ MessageBox.Show("NO NO NO!!!", "提示"); }//弹出消息对话框
else { MessageBox.Show("输入正确!!!!!", "提示"); }//弹出消息对话框
}

/// <summary>
/// 验证字符串是否为汉字 单位-名称-谁谁谁谁谁(中文 横杠)
/// 单位-名称-谁谁(英文 横杠)
/// </summary>
/// <param name="str_chinese">字符串</param>
/// <returns>方法返回布尔值</returns>
public bool IsChinese(string str_chinese)
{
string name001 = "([\u4e00-\u9fa5]{2}\\-){2}|([\u4e00-\u9fa5]{2}\\-){2}";//“—”中英文横杠
string name002 = "([\u4e00-\u9fa5]{2,5})";

//使用正则表达式判断是否匹配
return System.Text.RegularExpressions.Regex.IsMatch(str_chinese, ("^"+name001+""+ name002 +"$"));

}
...全文
1752 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
巅峰的路上 2020-10-23
  • 打赏
  • 举报
回复
引用 3 楼 wanghui0380的回复:
至于你写的有问题,是因为少了一个分组定义,第一句有 | 或者选择,所以他们需要加()分组 (([\u4e00-\u9fa5]{2}\\-){2}|([\u4e00-\u9fa5]{2}\\-){2}) 我们看看少加括号的词法token树就明白了 很明显最后的匹配规则挂到了or里
谢谢,非常感谢这么细致的解答,这个软件我记住了。当时反反复复试试,办法笨不说,人晕了。
wanghui0380 2020-10-23
  • 打赏
  • 举报
回复
至于你写的有问题,是因为少了一个分组定义,第一句有 | 或者选择,所以他们需要加()分组 (([\u4e00-\u9fa5]{2}\\-){2}|([\u4e00-\u9fa5]{2}\\-){2}) 我们看看少加括号的词法token树就明白了 很明显最后的匹配规则挂到了or里
wanghui0380 2020-10-23
  • 打赏
  • 举报
回复
(([\u4e00-\u9fa5]){2}([\-\-])){2}(?:\2+) 这样也是可以的
wanghui0380 2020-10-23
  • 打赏
  • 举报
回复
([\u4e00-\u9fa5]){2}([\-\-])(?:\1{2}\2)(?:\1+)

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧