CHEARV 发表于 2013-3-30 13:21:02

请教正则表达式分枝替换如何表达?

本帖最后由 CHEARV 于 2013-3-30 13:43 编辑

正则表达式的分枝情况我大概了解,就是用一个|分开。但如果要把匹配到的内容替换呢?如何表达,我试了好多次都不对。

湖南411100 2000-01-01
湖南411000 2002-01-01
广东518000 2003-04-05
广东518050 2009-05-01
广东

我想把上面的湖南和广东分别替换成HN和GD, 想把日期格式中的连接号去掉。

如果要匹配,可以用这个表达式湖南.+ \d{4}-\d{2}-\d{2}|广东.+ \d{4}-\d{2}-\d{2}

但要替换我就不知道要怎么写了,我这样写的不对
StringRegExpReplace($s, ' 湖南(.+)(\d{4})-(\d{2})-(\d{2})|广东(.+)(\d{4})-(\d{2})-(\d{2})' , 'HN$1$2$3$4|GD$1$2$3$4')
   请高手指点一下。

补充一下代码

Dim $s
$s = "湖南411100 2000-01-01" &@CRLF & _
"湖南411000 2002-01-01" &@CRLF & _
"广东518000 2003-04-05" &@CRLF & _
"广东518050 2009-05-01" &@CRLF & _
"广东"

;MsgBox(0,"",$s)
$s1 = StringRegExp($s, '湖南.+ \d{4}-\d{2}-\d{2}|广东.+ \d{4}-\d{2}-\d{2}',3)
$s2 = StringRegExpReplace($s, ' 湖南(.+)(\d{4})-(\d{2})-(\d{2})|广东(.+)(\d{4})-(\d{2})-(\d{2})' , 'HN$1$2$3$4|GD$1$2$3$4')

MsgBox(0,"",$s2)

xms77 发表于 2013-3-30 14:53:20

回复 1# CHEARV
分支不会的话可以分步替换,先替换湖南,再替换广东,最后替换-

CHEARV 发表于 2013-3-30 18:54:04

回复 2# xms77


谢谢,我目前是这样做的,但我想想看看有没有更好的。

shqf 发表于 2013-3-30 21:52:01

Dim $s
$s = "湖南411100 2000-01-01" &@CRLF & _
"湖南411000 2002-01-01" &@CRLF & _
"广东518000 2003-04-05" &@CRLF & _
"广东518050 2009-05-01" &@CRLF & _
"广东"
$s = StringReplace(StringReplace(StringReplace($S,"湖南","HN"),"广东","GD"),"-","")
MsgBox(0,"",$s)

mbdnmt 发表于 2013-3-30 22:50:08

这样写是不是易读点?Dim $s
$s = "湖南411100 2000-01-01" &@CRLF & _
"湖南411000 2002-01-01" &@CRLF & _
"广东518000 2003-04-05" &@CRLF & _
"广东518050 2009-05-01" &@CRLF & _
"广东"

$s = StringRegExpReplace($s, "-", "")
$s = StringRegExpReplace($s, "湖南", "HN")
$s = StringRegExpReplace($s, "广东", "GD")
MsgBox(0, "Info", $s)

CHEARV 发表于 2013-3-31 12:39:54

谢谢各位,但各位都是分步来替换的。我想知道有没有办法用一句代码就可以完成的。 既然可以分枝匹配,难道真不能分板替换吗?
页: [1]
查看完整版本: 请教正则表达式分枝替换如何表达?