C# 正则表达式替换制定关键词后面的所有内容
如题,将 {OUTSCIPTE} 关键词后的所有内容替换为string.Empty(包含关键字)
这个正则该怎么写?
我是 {OUTSCIPTE}(.*)$ 写的但是什么反应也没有
string str=Regex.Replace("字符串",@"(?<=\{OUTSCIPTE\})[\s\S]*$","");
不错的文章对零宽断言很好的理解与解释了
分组
我们在前面有用大括号{}来指定单个字母出现多少次,比如w{3}表示w连续出现三次.那如果是一串字符的话怎么整呢.我们会联想到算术符号里面的优先级问题,比如乘除号比加减号优先级高.要想使加减号先执行操作可以用个小括号把它们括起来.那在这儿同样把一串字符括起来就行.
比如(arwen){3}表示字符arwen重复三次. (ab[cde]*){4}表示ab[cde]*重复4次.反正用个()括起来后里面就被当作一个单元,一个整体了.专业点说法就叫分组
另外貌似用$加一个数字可以引用前面的分组.例如
string str = @"123abc";
string str = Regex.Replace(str,@(\d+)\w+, @"$1+456"); \\结果是123+456
(\d+)是匹配了123并把它做为一个组,$1就是引用了这个组
后向引用
后向引用,这名字听起来别扭,其实简单点讲就是在后面的匹配中又用到前面的某个分组.那如果在后面某个地方的匹配中要再次用到那个分组咋整呢?简单点的简单的做法把那个分组再照写下就得了呗.
比如(arwen){2}123abc(arwen){3}.但这样看起来有点冗余,于是就整个偷懒的办法出来.给每个分组起个名字,直接用组名来表示那个分组.如果你不直接命名会默认按分组从左到右出现的顺序命名为1,2,3...比如上面的例子最先出现的(arwen)命名为1,再出现个(arwen)命名为2,假如后面还来个(james)那命名为3
有个分组的名字后,上面的例子可以简写为(arwen){2}abc\1{3}引用分组的格式是一个斜杠\加组名
你还可以自己显式为每个组起个名字,格式是(?<name>exp)或者(?'name'exp)其中name是分组的名字,exp是分组中的内容.?就只是标识符而已.假如我要给分组(arwen)取名为a的话就这样写(?<a>arwen)这样开头的例子又可以写为(arwen){2}\a{3}
除了给分组默认取名或显式取名外还可以不给它取名格式是(?:exp)比如把分组(arwen)改成(?:arwen)就表示这个分组没名字.你后面不能通过某个名字去引用它.那这样做有什么意义呢?因为除这在这里我们看到分组名有用外,当通过Regex.Match(string source,string pattern)这个函数匹配取得结果后还可以做更详细的一些分析,那时也会用到分组名的.如果你想忽略掉某个位置的分组信息就可以显式的指定分组没有名字.
零宽断言
我们前面的一些简单匹配,都是先知道要匹配的子字符的一些信息,然后用些元字符和限制字符来表示它.进而匹配出结果.这是直接的匹配方式.还可以通过一些间接的匹配信息,比如知道子字符串前面有啥字符,屁股后面跟着些啥字符来匹配.
于是出现了零宽断言这个怪怪的名词,其实它代表的意思是这样,零宽表示那个表达式不占用地方,宽度为0,比如前面说的^$匹字符串的开头或结尾.它不占用地方,只表示开头或结尾这样一个位置概念.至于断言嘛是逻辑理论里面的一个说法.简单的说就是做判断了,下结论了.
零宽度正预测先行断言(?=exp) 它表示某个字符串背后跟着字符串exp比如.*(?=fool)表示某个字符以fool结尾.如果有字符you are afool.则匹配到的子字符是you are a
零宽度正回顾后发断言(?<=exp) 它表示某个字符串前面有字符串exp比如(?<=fuck)表示某个字符串前面有fuck.如果有字符fuck you则匹配的结果是 you
有了有通过前面或后面有某个字符串来判断,自然就可以有通过前面或后面没有啥字符来判断.这也是相反的意思.表示方法也差不多,只是=号变!
零宽度负预测先行断言 (?!exp) 它表示某个字符串后面没有跟着exp比如hao(?!\d)表示字符hao后面没紧跟着数字,如果有字符hao123,则不能匹配.如果是字符hao 123则匹配到hao
零宽度负回顾后发断言 (?<!exp)它表示某个字符串前面没有exp比如(?<!\d)hao表示字符串hao前没有数字.如果有字符123hao则匹配失败.如果是字符123 hao则匹配到hao
其实像啥零度断言这 类术语太让人纠结了,你干脆别去管他好了.就直接想象成前面有,后面有,前面没有,后面没有这样的通俗易懂的词好了
贪婪与懒惰
我们知道由于匹配的条件往往很模糊,所以匹配到的结果可以是不同的,比如有字符anrwen,用a.*n去匹配.那an和anrwen都是符合条件的结果
一匹配到an就不再匹配下去了,自然是很懒的做法,所以叫懒惰匹配.具体意思就是说尽可能匹配短的字符
而相反的情况就是贪婪匹配,尽可能匹配多的字符
默认的做法是贪婪匹配.所以上面的例子匹配的结果是anrwen
如果我们想得到an的结果,则要这样写a.*?n 多加个问号
至于这个?号在什么情况下用呢,自然是有出现让某个字符重复多次的限定符出现时用
比如* + ? {n}这些符号出现时就可以用,变成*? +? {n}?
C# 正则表达式替换制定关键词后面的所有内容的更多相关文章
- 在notepad++里面使用正则表达式替换掉所有行逗号前面内容
需求:在notepad++里面使用正则表达式替换掉所有行逗号前面内容,一文本内容如下(只贴一小部分,实际上N多): 级别,層級程序,程式插件,外掛程式鼠标,滑鼠打印,列印打开,開啟博客,部落格联系,聯 ...
- editplus-使用正则表达式替换每行首字母和尾字母
打开EditPlus,输入多行数据,快捷键ctrl+h 打开替换窗口,选择“正则表达式”替换 行首批量添加 查找"^" 替换为“我是行首aaa” 行尾批量添加 查找&quo ...
- Notepad++快捷键&正则表达式替换字符串&插件
Notepad++绝对是windows下进行程序编辑的神器之一,要更快速的使用以媲美VIM,必须灵活掌握它的快捷键,下面对notepad++默认的快捷键做个整理(其中有颜色的为常用招数): 1. 文件 ...
- 关于在Eclipse中使用正则表达式替换的一点记录(使用正则表达式的分组)
今天在工作中遇到了点替换的麻烦事,由于数据类进行了变动,具体情况是这样的,需要将下面的代码: player.skillData[i].name 替换为: player.skillData.getSki ...
- notepad++正则表达式替换字符串详解
正则表达式是一个查询的字符串,它包含一般的字符和一些特殊的字符,特殊字符可以扩展查找字符串的能力,正则表达式在查找和替换字符串的作用不可忽视,它 能很好提高工作效率. EditPlus的查找,替换,文 ...
- 使用Dreamweaver正则表达式替换href中的内容
在Dreamweaver中使用正则表达式替换href中的内容,就像下面这些href中的内容复杂多样的情况下,href="/html/u.html",href="/tuho ...
- dedecms文档长尾关键词,根据频率先替换长尾关键词再替换主关键词
问题:在使用dedecms的文档关键词替换功能时,会造成交叉替换 如: 长尾关键词1:男人喝金丝皇菊有什么好处? 长尾关键词2:喝金丝皇菊有什么好处? 主关键词3:金丝皇菊 使用系统默认的功能时,在替 ...
- java replaceall 使用正则表达式替换单等号,不替换其他相关的等号。
写项目需要将公式配置到数据库中,取出后根据公式规则进行比较,由于公式的等于是用单等号,在java中无法直接使用,故需要将单等号替换成双等号,单又不能影响大于等于以及其他形式.故果断选择正则表达式替换. ...
- JS 利用正则表达式替换字符串
JS 利用正则表达式替换字符串 博客分类: JavaScript 学习资料 Java代码 收藏代码 JS 利用正则表达式替换字符串 var data = "123123,213,12312, ...
随机推荐
- jQuery旋转插件—rotate
jQuery旋转插件,支持Internet Explorer 6.0+ .Firefox 2.0 .Safari 3 .Opera 9 .Google Chrome rotate(angle) 正值表 ...
- mybatis 执行传入的任意sql语句
dao类 /** * 自定义sql查询 * @param sqlContent * @return */ public List<LinkedHashMap<String, Object& ...
- python staticmethod,classmethod方法的使用和区别以及property装饰器的作用
class Kls(object): def __init__(self, data): self.data = data def printd(self): print(self.data) @st ...
- css border-sizing 用法与理解
浏览器支持 IE Firefox Chrome Safari Opera 支持 支持 支持 支持 支持 Internet Explorer.Opera 以及 Chrome 支持 box-si ...
- 通用测试用例大全(转自——知了.Test)
为方便平时写测试用例,整理如下: 功能 条件 测试步骤 测试数据 预期结果 备注 搜索或查询 单独遍历各查询条件,测试按各查询条件是否都能够查询出相应的值. 查询出符合条件的记录 设置 ...
- JMeter 一:Elements of a Test Plan
参考:http://jmeter.apache.org/usermanual/test_plan.html 最小测试集包括:Test Plan,一个Thread Group,以及一个或多个Sample ...
- ios 程序发布使用xcode工具Application Loader 正在通过ITUNES STORE进行鉴定错误
ios 程序发布使用xcode工具Application Loader 正在通过ITUNES STORE进行鉴定错误 一:此错误会导致上传程序,一直停留在验证阶段,而没有一点上传进度:结果会苦等半天, ...
- JavaScript 数组去重并统计重复元素出现的次数
1.方法一 var arr = [1, 2, 3, 1, 2, 4]; function arrayCnt(arr) { var newArr = []; for(var i = 0; i < ...
- canvas锯齿
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 调整 firefox 源代码查看器的字体
默认的 firefox 源代码查看器的字体很不好看,不适合阅读代码.想要修改,又没有发现入口.如何修改呢?实际上在选项里的字体就能改.方法如下: 打开选项页,在字体一栏点击高级,把等宽字体由“宋体”改 ...