C#正则表达式的零宽断言

嘎子 C# 2016-06-17 792 次浏览 , 没有评论

我写文章的一个最基本的想法就是只写可以解决问题的部分,这样能很快的解决一个问题,而不探讨这项技术中的复杂的技术细节,这样有好处也有坏处。好处是我写的文章都简单明了,坏处是我写的东西不一定能解决你的问题。同样,写的文章也往往不能解决我自己将来遇到的问题。

自己之前写过:C#正则表达式的应用,但现在我又遇到了新的问题。

问题描述如下:我有一系列点号,如C120、C121、C122。首先我想判断这个点号是不是(字母开头,后面加数字)的形式。如果是,我想把字母提取出来。

第一个要求用前面的文章中的东西很容易就达到了,代码如下:

但是现在的匹配结果是像C120这样的整个的符串,并达不到自己想提取前面C的要求。

要解决这个问题,就要用到零宽断言。零宽断言的意思是:匹配宽度为零,满足一定的条件/断言。用这个例子来说就是要求字母后面是数字,但不匹配(匹配宽度为零)后面的数字。

最常用的断言有两种,分别是先行断言后行断言。

先行断言的意思是匹配部分在前面,然后后面加断言。表达形式为(?=exp)。这个正好适用于现在这个情况。先给出表达式\b[a-zA-Z]+(?=[0-9]+\b)。在括号之前的就是C#正则表达式的应用中说明的内容,这里不再多说。括号里面就是先行断言。表示前面先是字母,后面以数字结尾,但不匹配数字。如果对C120使用这个表达式则匹配C

后行断言意思恰好和先行断言相反。类似于上面那个问题,如果我们想匹配C120中的120,则表达式为(?<=\b[a-zA-Z]+)[0-9]+\b。技术细节不再多说。

断言其实还有其他的种类,这里没有用到,暂时不多说。

原创文章,转载请注明: 转载自TsonTec:测量解决方案提供者

本文链接地址: C#正则表达式的零宽断言

相关主题

  • C#正则表达式的应用2016-03-06 C#正则表达式的应用 (0)
    自己正则表达式的基础看过很多了,但总是记不住,就将C#使用正则表达式的最常用的东西自己整理一下,以后直接到自己的博客上找非常方便。也希望能帮到有和我一样 […]
  • C#中的具名参数、可选参数及注意问题2016-03-21 C#中的具名参数、可选参数及注意问题 (0)
    具名参数 和 可选参数 是 C# framework 4.0 出来的新特性。 一. 常规方法定义及调用 public void […]
  • 用C#编写一个自己删除自身文件及文件夹的卸载程序2016-01-31 用C#编写一个自己删除自身文件及文件夹的卸载程序 (7)
    本来自己很高兴的写了一篇文章:用C#删除程序占用文件。本来以为是这一个很好的解决方案。事实再一次证明,没有实践,就没有发言权。自己在实际使用的时候发现根本不是 […]
  • 将自写的卸载程序添加到控制面板中2016-02-09 将自写的卸载程序添加到控制面板中 (0)
    本文以C#语言为例,但实际上你可以使用任何语言来做这件事,甚至你都可以手动添加。 先直接明了,上图片: […]
  • 返回null还是抛出Exception2016-03-22 返回null还是抛出Exception (2)
    我自己在写代码的时候也经常会写return null,但仔细想想这真的好吗? public User GetUser(string […]
  • 用C#获取NIST时间2016-02-05 用C#获取NIST时间 (0)
    NIST为National Institute of Standards and […]

说点什么

您将是第一位评论人!

提醒
avatar
wpDiscuz
回顶部