请教文本替换的问题(可能需要正则?) 已解决
本帖最后由 hnfeng 于 2016-4-12 16:47 编辑#include <Array.au3>
Global $t_RegExp = "\b(?:|{2}|{2}|2|25)\.(?:|{2}|{2}|2|25)\.(?:|{2}|{2}|2|25)\.(?:|{2}|{2}|2|25)\b"
Local $Text="asasaf 111.111.111.1aaa" & @CRLF & "asasaf 111.111.111.1" & @CRLF & "asasaf 111.111.111.11" & @CRLF & "asasaf 111.111.111.11aaa" & @CRLF & "asasaf 111.111.111.111" & @CRLF & "asasaf 111.111.111.111aaaa"
Local $a_IP = StringRegExp($Text, $t_RegExp, 3)
_ArraySort($a_IP);排序
$a_IP = _ArrayUnique($a_IP, 0, 0, 0, 0) ;去除重复值
; 假如由 $a_IP 得到了 下面的 $a_IP_Add
Local $a_IP_Add=[["111.111.111.1","地址11111111111"], _
["111.111.111.11","地址22222222222222222222"], _
["111.111.111.111","地址33333"]]
_ArrayDisplay($a_IP_Add)
MsgBox(0,"原始文本",$Text)
; 下面的替换结果是不正确的
$Text=StringReplace($Text,$a_IP_Add,$a_IP_Add & " [" & $a_IP_Add & "]")
MsgBox(0,"替换111.111.111.1",$Text)
$Text=StringReplace($Text,$a_IP_Add,$a_IP_Add & " [" & $a_IP_Add & "]")
MsgBox(0,"替换111.111.111.11",$Text)
$Text=StringReplace($Text,$a_IP_Add,$a_IP_Add & " [" & $a_IP_Add & "]")
MsgBox(0,"替换111.111.111.111",$Text)
;~ StringRegExpReplace ( "字符串", "表达式", "替换", [ 数量 = 0] )
例如 想替换文本 $Text 中的 111.111.111.1 为 111.111.111.1 [地址11111111111],但是使用上述命令后,还会替换 111.111.111.11、111.111.111.111 前面的 111.111.111.1 部分。如何才能避免这种错误?
搞掂了:
$Text=StringRegExpReplace($Text,"\b" & $a_IP_Add & "\D",$a_IP_Add & " [" & $a_IP_Add & "]") 看了 StringRegExpReplace 的帮助,不知道如何下手 相当有意思,别人花金币帮忙。坐等坛子里大佬们的回复{:face (356):} 本帖最后由 hnfeng 于 2016-4-12 15:25 编辑
回复 3# zghwelcome
不好意思,本来是想“悬赏”的,看错了
#include <Array.au3>
Global $t_RegExp = "\b(?:|{2}|{2}|2|25)\.(?:|{2}|{2}|2|25)\.(?:|{2}|{2}|2|25)\.(?:|{2}|{2}|2|25)\b"
Local $Text="asasaf 111.111.111.1aaa" & @CRLF & "asasaf 111.111.111.1" & @CRLF & "asasaf 111.111.111.11" & @CRLF & "asasaf 111.111.111.11aaa" & @CRLF & "asasaf 111.111.111.111" & @CRLF & "asasaf 111.111.111.111aaaa"
Local $a_IP = StringRegExp($Text, $t_RegExp, 3)
_ArraySort($a_IP);排序
$a_IP = _ArrayUnique($a_IP, 0, 0, 0, 0) ;去除重复值
; 假如由 $a_IP 得到了 下面的 $a_IP_Add
Local $a_IP_Add=[["111.111.111.1","地址11111111111"], _
["111.111.111.11","地址22222222222222222222"], _
["111.111.111.111","地址33333"]]
_ArrayDisplay($a_IP_Add)
MsgBox(0,"原始文本",$Text)
; 下面的替换结果是不正确的
$Text=StringReplace($Text,$a_IP_Add,$a_IP_Add & " [" & $a_IP_Add & "]")
MsgBox(0,"替换111.111.111.1",$Text)
$Text=StringReplace($Text,$a_IP_Add,$a_IP_Add & " [" & $a_IP_Add & "]")
MsgBox(0,"替换111.111.111.11",$Text)
$Text=StringReplace($Text,$a_IP_Add,$a_IP_Add & " [" & $a_IP_Add & "]")
MsgBox(0,"替换111.111.111.111",$Text) StringRegExpReplace($Text, "\b111\.111\.111\.1\b", "new")
这样倒是可以,但是貌似 StringRegExpReplace 里面的正则表达式不支持 $xxxx 变量。 回复 5# hnfeng
A版的正则用的炉火纯青,无人能出其右 回复hnfeng
A版的正则用的炉火纯青,无人能出其右
zghwelcome 发表于 2016-4-12 16:14 http://www.autoitx.com/images/common/back.gif
给我戴那么大顶帽子,亚历山大…
我只是个菜鸟。 这样倒是可以,但是貌似 StringRegExpReplace 里面的正则表达式不支持 $xxxx 变量。
hnfeng 发表于 2016-4-12 16:01 http://www.autoitx.com/images/common/back.gif
因太乱 没细看!
估计 StringRegExpReplace($Text, "\b111\.111\.111\.1\b", "new")改为你说的变量
StringRegExpReplace($Text, '\Q' & $xxxx & '\E', "new") 即可 我擦~看了好半天才看明白题意,是不是这样?
直接说 原字符 是什么,目标字符是什么。多么简单的事,非要复杂化。
#include <Array.au3>
Global $t_RegExp = "\b(?:|{2}|{2}|2|25)\.(?:|{2}|{2}|2|25)\.(?:|{2}|{2}|2|25)\.(?:|{2}|{2}|2|25)\b"
Local $Text = "asasaf 111.111.111.1aaa" & @CRLF & "asasaf 111.111.111.1" & @CRLF & "asasaf 111.111.111.11" & @CRLF & "asasaf 111.111.111.11aaa" & @CRLF & "asasaf 111.111.111.111" & @CRLF & "asasaf 111.111.111.111aaaa"
Local $a_IP = StringRegExp($Text, $t_RegExp, 3)
_ArraySort($a_IP) ;排序
$a_IP = _ArrayUnique($a_IP, 0, 0, 0, 0) ;去除重复值
; 假如由 $a_IP 得到了 下面的 $a_IP_Add
Local $a_IP_Add = [["111.111.111.1", "地址11111111111"], _
["111.111.111.11", "地址22222222222222222222"], _
["111.111.111.111", "地址33333"]]
_ArrayDisplay($a_IP_Add)
MsgBox(0, "原始文本", $Text)
; 下面的替换结果是不正确的
$Text = StringRegExpReplace($Text, $a_IP_Add & "(\D)", $a_IP_Add & " [" & $a_IP_Add & "]\1")
MsgBox(0, "替换111.111.111.1", $Text)
$Text = StringRegExpReplace($Text, $a_IP_Add & "(\D)", $a_IP_Add & " [" & $a_IP_Add & "]\1")
MsgBox(0, "替换111.111.111.11", $Text)
$Text = StringRegExpReplace($Text, $a_IP_Add & "(\D)", $a_IP_Add & " [" & $a_IP_Add & "]\1")
MsgBox(0, "替换111.111.111.111", $Text)
回复 8# afan
确实是挺乱,老半天我都没看明白题意,猜着写的~吼吼~ 回复afan
确实是挺乱,老半天我都没看明白题意,猜着写的~吼吼~
haijie1223 发表于 2016-4-12 17:03 http://www.autoitx.com/images/common/back.gif
是的,主要是乱在长代码没分行
而且,如果不是验证ip合法根本无需那么长的表达式
最后,楼主的1#的已解决方案肯定是错的 回复 11# afan
他的解决方案明显原字符丢了一个\D 回复afan
他的解决方案明显原字符丢了一个\D
haijie1223 发表于 2016-4-12 17:15 http://www.autoitx.com/images/common/back.gif
猜错~继续 回复 13# afan
小弟愚钝,还请afan指点。 回复afan
小弟愚钝,还请afan指点。
haijie1223 发表于 2016-4-12 17:19 http://www.autoitx.com/images/common/back.gif
我还是没细看发哥先用最多两行说明楼主要把啥替换成啥 {:face (303):}