正则表达式入门以及在iUAP DI中的使用
1. 什么是正则表达式
正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如表达式“ab+”描述的特征是“一个'a' 和任意个'b' ”,那么'ab', 'abb', 'abbbbbbbbbb' 都符合这个特征。
正则表达式可以用来:
(1)验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。
(2)用来查字符串,从一个长的文本中查符合指定特征的字符串,比查固定字符串更加灵活方便。
(3)用来替换,比普通的替换更强大。
2. 正则表达式规则
2.1 普通字符
字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号,都是"普通字符"。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。
举例1:表达式"c",在匹配字符串"abcde" 时,匹配结果是:成功;匹配到的内容是:"c";匹配到的位置是:开始于2,结束于3。(注:下标从0开始还是从1开始,因当前编程语言的不同而可能不同)
举例2:表达式"bcd",在匹配字符串"abcde" 时,匹配结果是:成功;匹配到的内容是:"bcd";匹配到的位置是:开始于1,结束于4。
2.2 简单的转义字符
一些不便书写的字符,采用在前面加"\" 的方法。
号本身。比如:^, $ 都有特殊意义,如果要想匹配字符串中"^" 和"$" 字符,则表达式就需要写成"\^" 和"\$"。
正则化包括dropout这些转义字符的匹配方法与"普通字符" 是类似的。也是匹配与之相同的一个字符。
举例1:表达式"\$d",在匹配字符串"abc$de" 时,匹配结果是:成功;匹配到的内容是:"$d";匹配到的位置是:开始于3,结束于5。
1.3 能够与'多种字符' 匹配的表达式
正则表达式中的一些表示方法,可以匹配'多种字符' 其中的任意一个字符。比如,表达式"\d" 可以匹配任意一个数字。虽然可以匹配其中任意字符,但是只能是一个,不是多个。
举例1:表达式"\d\d",在匹配"abc123" 时,匹配的结果是:成功;匹配到的内容是:"12";匹配到的位置是:开始于3,结束于5。
举例2:表达式"a.\d",在匹配"aaa100" 时,匹配的结果是:成功;匹配到的内容是:"aa1";匹配到的位置是:开始于1,结束于4。
1.4 自定义能够匹配'多种字符' 的表达式
使用方括号[ ] 包含一系列字符,能够匹配其中任意一个字符。用[^ ] 包含一系列字符,则能够匹配其中字符之外的任意一个字符。同样的道理,虽然可以匹配其中任意一个,但是只能是一个,不是多个。
举例1:表达式"[bcd][bcd]" 匹配"abc123" 时,匹配的结果是:成功;匹配到的内容是:"bc";匹配到的
位置是:开始于1,结束于3。
举例2:表达式"[^abc]" 匹配"abc123" 时,匹配的结果是:成功;匹配到的内容是:"1";匹配到的位置是:开始于3,结束于4。
1.5 修饰匹配次数的特殊符号
前面章节中讲到的表达式,无论是只能匹配一种字符的表达式,还是可以匹配多种字符其中任意一个的表达式,都只能匹配一次。如果使用表达式再加上修饰匹配次数的特殊符号,那么不用重复书写表达式就可以重复匹配。
使用方法是:"次数修饰"放在"被修饰的表达式"后边。比如:"[bcd][bcd]" 可以写成"[bcd]{2}"。
到的内容是:"12.5";匹配到的位置是:开始于10,结束于14。
举例2:表达式"go{2,8}gle" 在匹配"Ads by goooooogle" 时,匹配的结果是:成功;匹配到的内容是:"goooooogle";匹配到的位置是:开始于7,结束于17。
1.6 其他代表抽象意义的特殊符号
一些符号在表达式中代表抽象的特殊意义:
与字符串开始的地方匹配,因此,只有当"aaa" 位于字符串的开头的时候,"^aaa" 才能匹配,比如:"aaa xxx xxx"。
举例2:表达式"aaa$" 在匹配"xxx aaa xxx" 时,匹配结果是:失败。因为"$" 要求与字符串结束的地方
匹配,因此,只有当"aaa" 位于字符串的结尾的时候,"aaa$" 才能匹配,比如:"xxx xxx aaa"。
举例3:表达式".\b." 在匹配"@@@abc" 时,匹配结果是:成功;匹配到的内容是:"@a";匹配到的位置是:开始于2,结束于4。
进一步说明:"\b" 与"^" 和"$" 类似,本身不匹配任何字符,但是它要求它在匹配结果中所处位置的左右两边,其中一边是"\w" 范围,另一边是非"\w" 的范围。
举例4:表达式"\bend\b" 在匹配"weekend,endfor,end" 时,匹配结果是:成功;匹配到的内容是:"end";匹配到的位置是:开始于15,结束于18。
一些符号可以影响表达式内部的子表达式之间的关系:
匹配到的内容是:"Tom";匹配到的位置是:开始于4,结束于7。匹配下一个时,匹配结果是:成功;匹配到的内容是:"Jack";匹配到的位置时:开始于15,结束于19。
举例6:表达式"(go\s*)+" 在匹配"Let's go go go!" 时,匹配结果是:成功;匹配到内容是:"go go go";匹配到的位置是:开始于6,结束于14。
举例7:表达式"¥(\d+\.?\d*)" 在匹配"$10.9,¥20.5" 时,匹配的结果是:成功;匹配到的内容是:"¥20.5";匹配到的位置是:开始于6,结束于10。单独获取括号范围匹配到的内容是:"20.5"。
1.7 字符大小写与贪婪模式
正则表达式一般来说是区分大小写的,对于字符串”AAAbcdddd”,使用正则表达式”aaa\w+”是无法匹配,但有时候需要不区分大小写匹配,例如在匹配数据库表名时。可以在组前添加特殊的非捕捉构造(?)实现,在上例中使用正则表达式”(?i)aaa\w+”就可以匹配字符串”AAAbcdddd”。
当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。对于正则表达式”a.*b”,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问
号?。这样”.*?”就意味着在能使整个匹配成功的前提下使用最少的重复。”a.*?b”匹配最短的,以a开始,以b结束的字符串。如果把它应用于”aabab”的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。
3. 在iUAP DI中正则表达式的使用
3.1 匹配和过滤文件名
在文本输入和Excel输入中,可以进行同结构多个文件的数据读取,在选文件时可以选择一个文件夹下的文件,通过正则表达式过滤和排除。
例1 :在文本输入中填写正则表达是Linux.*\.txt,选择C:\Users\zuoym\Documents\目录,点击“增加”按钮,在问价列表中增加了一条记录,点击“显示文件名”,在弹出框内可以看到所有以Linux开头的文本文件。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论