夜色之下 发表于 2013-1-23 02:40:53

Rm中巧用正则表达式和替换

我们先介绍一下什么是Substitute?
Substitute是在measure下面用来建立一些字符来替代其他指定的所有字符的选项,当我们结合正则替换(RegExpSubstitute)选项之后,那么正则表达式可以使用在substitute里面.
下面是一个例子:
Measure=Time
Format=%Y
Substitute="2012":"Twenty Twelve","2013":"Twenty Thirteen","2014":"Twenty Fourteen"下面介绍一下基本的应用
一系列由分号分割的类似于”查找到的”:”被替换的”,这样的一串串的东西可以使用在measure下面改变字符,注意你比寻用引号引起来,例如: Substitute="cat":"dog",将会把在相应measure里面监测到的所有找到的”cat”字符串替换为”dogs”,你可以写多个这样,的替换,比如: Substitute="red":"green","blue":"yellow",这个是将”red”替换我”green”,”blue”替换为”yellow”.
当一个meausure在一个meter里面利用measurename= 这个选项选定之后,substitute(替换后)的值将会被启用.
例子如下:
Measure=Time
Format=%Y
Substitute="2012":"Twenty Twelve"


Meter=String
MeasureName=MeasureYear那么上面的 MeterYearText 这个meter将会显示” Twenty Twelve”

当一个measure直接被其他的一个meter或者measure使用的时候,例如,在一个measure=calc 的measure里面,这个被替换后的值只有被”[”,”]”闭合起来而且meter或者相应的measure里面设施了动态变量之后才有效,不然,替换之前的原值将会呗启用,替换失败.
比如下面一个例子:
Measure=Time
Format=%y
Substitute="12":"Twenty Twelve"


Measure=Calc
Formula=(2000 + MeasureYear)


Meter=String
Text=
DynamicVariables=1
这个也是一样 MeasureYearNumber会返回2012而且MeterYearText将会显示的是” Twenty Twelve”.
替换是从左向右进行的,是有顺序和有迭代性质的,换句话讲,第一次替代后的,如果在第二次里面是一个被查找的字符串,那么这个刚替换的字符会参与第二次替换,如此循环,所以说呢,你确定一个好的替换顺序是十分的重要的东西,通过定义一个查找方式使之不至于出现意外的改变.
比如:
Substitute="1":"2","10":"3","100":"4"
这个语句不会返回你所期待的东西,第一,替换将把所有的字符”1”替换为”2”,这个意味着”10’和”100”将不会被查找到,因为他们都被替换成为了”20”和”200”了,这个
可以通过定义替换的顺序老解决这个问题,比如下面的例子 :
Substitute="100":"4","10":"3","1":"2"

有时候呢,你可能需要替换引号字符,这个可以通过被双引号围起来的方式解决这个问题,比如Substitute='"':"",这个将会将双引号替换为空,相反的Substitute="None":'"'这个会将字符”None”会被替换为双引号,然而Substitute='"':'None',这个是不行的,因为你不能再”:” 符号的两端都是用单引号,一个简单的例子是: Substitute='red':'blue',这个也是不行的.

下面讲讲十分重要而且有用的正则替换
当这个置为1的时候,那么就允许使用正则表达式在替换字符的时候,满足正则匹配条件的源字符串将会被替换为冒号之后的字符串,原理和上面的一样,只是这里可以使用正则表达式了而已.
下面介绍几个例子吧:
替换两个数字构成的字符串为”it works”,将开头的两个字符串替换为”this”
RegExpSubstitute=1
Substitute="\d\d":"It Works","^..":"This"
掩码IP地址
192.168.1.101
RegExpSubstitute=1
Substitute="^(\d{1,3}).(\d{1,3}).(\d{1,3}).\d{1,3}$":"\1.\2.\3.***"
上面就会返回 192.168.1.***
说明一下上面的意思:^表示字符的开头,$表示字符结尾,( )括起来的东西可以再后面用\n引用比如上面的例子里面就用到了,注意\n是按()出现的顺序一一对应的,很简单的东西,\d表示匹配一个数字类型的,{1,3}表示匹配的个数是1个到3个之间包含1和3,就是这样.

截断字符串并且追加”…”:
比如” Cloudy with chance of rain”
RegExpSubstitute=1
Substitute="^(.{11,}).+$":"\1..."
结果为Cloudy with...
解析一下上面的替换, . 表示的是任意一个字符串,{11,},这个指明了截取最小的字符数量就是11,后面替换为”\1…”意思是将这个字符串的第11个字符之后的所有的字符替换为…,并且保留前11个字符

下面将一个应用的例子:
Update=1000


ImagePath=F:\我的图片\奇闻异图
SubFolders=1
FileFilter=*.jpg;*.jpeg;*.png;*.bmp
UpdateRate=2


Measure=Plugin
Plugin=Plugins\QuotePlugin.dll
PathName=#ImagePath#
FileFilter=#FileFilter#
Subfolders=#SubFolders#
UpdateDivider=#UpdateRate#
Disabled=0


Measure=TIME
Format=
DynamicVariables=1
RegExpSubstitute=1
Substitute="\\(.*)\\":"","^.:":"","...\D$":""
UpdateDivider=#UpdateRate#
Disabled=0


Meter=IMAGE
MeasureName=mPic
MeasureName2=FileName_Ext
X=0
Y=0
W=250
Hidden=0
ToolTipText=" %2"
ToolTipType=0
UpdateDivider=#UpdateRate#说明一下,这个例子,这个里面用到了我们说到的正在表达式替换,关于正则表达式我不想过多的讲,因为很多新人都用不上,我只简单的讲讲上面的相应的正则表达式的意思是神马,你关键要看的是这个节点下面的内容,like:
Measure=TIME
Format=
DynamicVariables=1
RegExpSubstitute=1
Substitute="\\(.*)\\":"","^.:":"","...\D$":""
UpdateDivider=#UpdateRate#
Disabled=0有的人会说了,怎么可以这么弄,这不是一个时间类型的measure么?
是的,但是我可以告诉你的是这个是可以的,RM给了字符串处理的measure其实就是TIME这个类型的measure,因为它的格式可以又我们自己定义的,至于数字的处理一般用calc,注意也是可以用正则表达式替换的,你可以用这个做到更多的东西.好的回归正题了,由于这个引入的是一个文件名称,要用正则表达式即时的处理那么就要DynamicVariables=1这句什么意思不用说了吧,由于我们要使用正则表达式替换那么就要RegExpSubstitute=1,之后呢?我们可以再这里写我们的正则表达式了, 现在我们看这句:
Substitute="\\(.*)\\":"","^.:":"","...\D$":""
这句是什么意思?

这句很简单,我举一个例子:
比如你有一个图片文件的完整路径是:c:\mydocument\images\demo.png
那么\\(.*)\\就可以表示 \mydocument\images\说明一下\\(.*)\\,其实它是由几个部分构成的 \\ 和(.*)之后又是一个\\   ,\\是什么意思呢 ?这个表示一个反斜杠(\)的直接字面量,意思就是它就直接表示这个反斜杠而已,那么为什么要写两个反斜杠呢?因为反斜杠是一个有特殊用途的特别字符,因而使用的时候要转义, 转义的意思就是将一个有特殊功能的字符转换为这个字符的字面量本身,就是这么简单,那么,(.*)什么意思呢?它表示匹配一个或者多个字符,你只要懂得的是这里将”\mydocument\images\”这部分置为空,下面说说^.:这句什么意思?^是一个起始符号,写了这个表示从一个字符串开头开始匹配,是在不懂也没有关系,我将一下在这里的用途,这里就是将”C:”这个字符串置为空,” ...\D$”的意思也很简单,因为你懂的一个图片类型的文件后缀都是.xxx构成的就是说由4个字符构成,并且在结尾,那么”$”这个就是表示从结尾匹配的,”…\D$”表示的正是这个图片文件夹的后缀名称,\D表示出了数字之后的一切字符,懂了吧,很简单是不是?那么你会了这个之后你就可以得到一个图片的文件名称,如果你将正则改变一下成为Substitute="\\(.*)\\":"","^.:":"" 那么就会显示文件名称和文件的后缀,同理你可以做更多的尝试.如果你会正则表达式那么你可以做更多…



我是秦 发表于 2013-1-27 00:08:15

楼主辛苦了

刀刀兄 发表于 2013-1-27 21:15:38

楼主幸苦了,赞一个{:10_402:}

跟着一起来 发表于 2013-1-28 11:35:02

辛苦辛苦~~

576660185 发表于 2013-5-4 17:58:05

yuxiubi 发表于 2017-4-5 09:06:57

楼主,还在不在玩雨滴啊



---------------------------------------------------------------------------------------------------------------------

yuxiubi于2017-4-5 09:07补充以下内容:
我想请教你一下问题

---------------------------------------------------------------------------------------------------------------------
页: [1]
查看完整版本: Rm中巧用正则表达式和替换