又是正则问题
问题~~~有一些目标数据,本身没有什么规律,但某个指定的字符前面是符合某一特定规则的字符串,通过正则把不符合的字符找出来。比如一个数据样本1122d3455d8d56dcf44drt66ddtr54我想保证d的前面是两个相同的数字,用其他的符号替换掉不符合规则的d。请问如何做到呢? $str="1122d3455d8d56dcf44drt66ddtr54"$arr=StringSplit($str,"d")
$result=""
For $i=1 To $arr-1
If StringLen($arr[$i])<2 Then
$result&=$arr[$i]&"*"
Else
If StringRegExp($arr[$i],"(\d)\1$",0) Then
$result&=$arr[$i]&"d"
Else
$result&=$arr[$i]&"*"
EndIf
EndIf
next
$result&=$arr[$arr]
MsgBox(0,"",$result)我只能这样实现,正则的可以找出符合的,不符合的实在没想出来怎么找 回复 2# kevinch
看来一次性是搞不定了。我开始想的办法是先找出符合的,替换成其他字符‘保护起来’,再替换剩下的。变通的方法还是蛮多的~~ 本帖最后由 3mile 于 2011-9-30 23:56 编辑
Local $Str = '1122d3455d8d56dcf44drt66ddtr54'
Local $Test = StringRegExpReplace($str, '(\d)((?(?!\1).))(d)|(?<=d)(\d)d', '\1\2\4*')
MsgBox(0, '替换结果', $Test) 一句正则替换的确不是新手能弄的,弄了半天也没弄成,等a版来吧! 回复 4# 3mile
Local $Str = '1122d3455d8d56dcf44drt66ddtr54'
;~ Local $Test = StringRegExpReplace($str, '(\d)((?(?!\1).))(d)|(?<=d)(\d)d', '\1\2\4*')
Local $Test = StringRegExpReplace($str, '(\S)(?!\1)(.)d', '$1$2\*')
MsgBox(0, '替换结果', $Test)
回复 4# 3mile
我看了下你的表达式,恩……有点儿针对性,把测试字符串改成:
1122d3455di8d56dcf44drt66ddtr54
就有问题,表达式有点儿针对性哦
表达式中用了类if判断,挺深奥,哈哈 本帖最后由 gzh888666 于 2011-10-1 03:18 编辑
回复3mile
binghc 发表于 2011-10-1 00:48 http://www.autoitx.com/images/common/back.gif
1122d3455di8d56dcf44drt66ddtr54ddd
(\S)(?!\1)(.)d 替换$1$2\* 我测试的有错误,问一下这个(?!\1)的作用!不明白这句其中的?!和\1 回复 7# binghc
嗯,用\S比较有通用性。
试试:(\S)((?(?!\1).))(d)
页:
[1]