$12$2$3$12$2$5$2$,求删除类似字符串中重复数值的正则 (已解决)
本帖最后由 llztt 于 2010-2-21 20:35 编辑想用StringRegExpReplace来解决问题,如$12$2$3$12$2$5$2$,经过替换后为$12$2$3$5$
试了一晚上了,没成功。。特来求助,谢谢 不知道啥意思,如有重复只留一个? 恩那,呵呵 楼主给加多少分??#include <Array.au3>
$mmmm = "12&2&3&12&2&5&2&15&19&17&15&&"
MsgBox(0, "ok",chongfu($mmmm, "&"))
Func chongfu($data, $s);$s=分隔符...
Local $a = StringSplit($data, $s, 1)
Local $x = $a
For $i = 1 To $a
Local $b = _ArrayFindAll($x,$a[$i],1,$x,1)
For $m = 0 To UBound ($b)-1
_ArrayDelete($x, $b[$m]-$m)
Next
_ArrayInsert($x,$b, $a[$i])
Next
_ArrayDelete($x,0)
Return _ArrayToString($x,$s)
EndFunc 楼上的代码适合以下各种情况:
分隔符在前,比如"&abc&d&abc&ff&mm&&"="&abc&d&ff&mm"
分隔符在后,比如"abc&d&abc&ff&mm&&"="abc&d&ff&mm&"
而且支持多字符的分割符.. "&-&-abc&-d&-abc&-&ff&-mm&-"="&-abc&-d&-&ff&-mm"
另外注意的是,两端有空数据的时候(也就是只有分隔符,或者说是两个分隔符之间没有其他字符)会自动自动忽略,比如上面的例子红色部分...
中间有重复分隔符的时候,则会改变分隔符的识别方法,比如"abc&d&abc&&&ff&mm&"
将会理解为"abc&d&abc&"+"&&ff&mm&"两段字符,前一段的分割符在数据后边,后一段的分割符在数据前面,结果就是"abc&d&" +"&ff&mm"了... LZ 如想用 StringRegExpReplace 一次搞定应该不行…… 如只需结果那 sanmoking 的就行了~
或者$Str = '$12$2$3$12$2$5$2$12$2$3$12$2$5$2$12$2$3$12$2$5$2$'
$sR = StringRegExp($Str, '\$[^\$]*', 3)
$new = $sR
For $i = 1 To UBound($sR) - 1
If StringInStr($new, $sR[$i]) = 0 Then $new &= $sR[$i]
Next
If $sR = '$' Then $new &= $sR
MsgBox(0, $Str, $new) Local $aVar, $sVar, $sResult, $sString = "$12$2$3$12$2$5$2$12$2$3$12$2$5$2$12$2$3$12$2$5$2$"
$aVar = StringSplit($sString, "$")
For $i = 1 To $aVar
If ($aVar[$i] = "") Then ContinueLoop
If (StringInStr($sVar, "$" & $aVar[$i] & "$")) Then ContinueLoop
$sVar &= "$" & $aVar[$i] & "$"
$sResult &= "$" & $aVar[$i]
Next
Msgbox(0, "", $sResult & "$") 修改了一下,增加点效率,
红色=删除,橙色=修改.绿色=增加
#include <Array.au3>
$mmmm = "12&2&3&12&2&5&2&15&19&17&15&&"
MsgBox(0, "ok",chongfu($mmmm, "&"))
Func chongfu($data, $s);$s=分隔符...
Local $a = StringSplit($data, $s, 1)
Local $x = $a
For $i = 1 To $a
Local $b = _ArrayFindAll($x,$a[$i],1,$x,1)
For $m = 1 To UBound ($b)-1
_ArrayDelete($x, $b[$m]-$m+1)
Next
; _ArrayInsert($x,$b, $a[$i])
Next
_ArrayDelete($x,0)
Return _ArrayToString($x,$s)
EndFunc 非常感谢楼上几位捧场,尤其sanmoking兄,忒热心啦,呵呵
如AFAN兄所言,我确实想用StringRegExpReplace一句搞定来,但被那个“零宽断言”“后项引用”什么的弄的头大,没搞成,特来求救了,至于StringSplit是后来搞不成就凑合用了
再次感谢各位
页:
[1]