35888894 发表于 2012-8-21 16:57:58

请教一个正则替换的问题

本帖最后由 35888894 于 2012-8-21 18:41 编辑

Local $hhef=':正常,"主营米奇,均为专柜正品,带防伪,欢迎大家前来选购",14733251131,迪士尼米奇女包包专柜正"品2012新款,夏潮女士长,款钱包邮U"P2103-02,2012-08-09 23:30:39,ht,箱包皮具/热销女包/男包>钱包卡套>钱包卡套,129.00,包邮,744,否,37,0:正常, , '
Local $bbsd=$hhef

$bbsd=StringRegExpReplace($bbsd,'(\".*?)\,(.*?\".*?)',"$1|$2")
这么匹配只呢匹配到第一个...后面的匹配不到

MsgBox(0,"",$bbsd)
请教下,如何用正则表达式将双引号内的逗号替换成句号
谢谢!

35888894 发表于 2012-8-21 18:41:42

求高手给予解答,谢谢

whitehead 发表于 2012-8-21 19:27:14

是不是这个原因:
? (after a repeating character)        
Find the smallest match instead of the largest.

user3000 发表于 2012-8-21 21:45:13

选购",14733251131,迪士尼米奇女包包专柜正"品[\quote]

这不算两个双引号之间?

35888894 发表于 2012-8-22 09:57:53

回复 4# user3000

引号需要配对的,我主要的目的是用于分析csv格式的文件
,"xxxxx",格式为这样

xiehuahere 发表于 2012-8-22 15:01:40

本帖最后由 xiehuahere 于 2012-8-22 15:10 编辑

回复 1# 35888894


直接正则貌似不行,不支持组的嵌套,很难做啊~~
否则就可以 "((.*?),){1,}(.*?)" 这种方式来正则替换了。

最终以很难看的方式做出来了,但优点是正则简单 ^_^

#include <Array.au3>
#include <String.au3>

Local $bbsd = ':正常,"主营米奇,均为专柜正品,带防伪,欢迎大家前来选购",14733251131,迪士尼米奇女包包专柜正"品2012新款,夏潮女士长,款钱包邮U"P2103-02,2012-08-09 23:30:39,ht,箱包皮具/热销女包/男包>钱包卡套>钱包卡套,129.00,包邮,744,否,37,0:正常, , '
$array1 = StringRegExp($bbsd, '".*?"', 3) ; Get string within double quotation marks
_ArrayDisplay($array1)
For $i = 0 To UBound($array1) - 1
        $array1[$i] = StringRegExpReplace($array1[$i], ',', '。')
Next
_ArrayDisplay($array1)
$array2 = StringSplit($bbsd, '"')
_ArrayDisplay($array2)
;Rejoin strings
$bbsd = ""
Local $j = 0
For $i = 1 To $array2
        If Mod($i, 2) == 0 Then ;even
                $bbsd &= $array1[$j]
                $j += 1
        Else ;odd
                $bbsd &= $array2[$i]
        EndIf
Next
MsgBox(0, "", $bbsd)

whitehead 发表于 2012-8-22 21:38:02

左右双引号有区别吗?

duck904 发表于 2012-8-22 22:31:52

本帖最后由 duck904 于 2012-8-22 22:35 编辑

Local $hhef=':正常,"主营米奇,均为专柜正品,带防伪,欢迎大家前来选购",14733251131,迪士尼米奇女包包专柜正"品2012新款,夏潮女士长,款钱包邮U"P2103-02,2012-08-09 23:30:39,ht,箱包皮具/热销女包/男包>钱包卡套>钱包卡套,129.00,包邮,744,否,37,0:正常, , '

$befor = $hhef
$after = $hhef
$reg = "(.*)(""[^""]*"").*"

$after = StringRegExpReplace($befor,$reg,"$1")
$subStr = ""
While $befor <> $after
        $subStr = $subStr & @LF & StringRegExpReplace($befor,$reg,"$2")
        $befor = $after
        $after = StringRegExpReplace($befor,$reg,"$1")
WEnd

MsgBox(0,"",$subStr)$subStr可以改成数组,然后对数组每个元素把','替换成'.'
$reg = "(.*)(""[^""]*"").*"说明:[^""]*任意个非双引号的字符

xiehuahere 发表于 2012-8-22 22:56:19

本帖最后由 xiehuahere 于 2012-8-22 23:02 编辑

简化下6#代码,好像没有必要用正则(除非正则能一次搞定——期待高人)。
Local $bbsd = ':正常,"主营米奇,均为专柜正品,带防伪,欢迎大家前来选购",14733251131,迪士尼米奇女包包专柜正"品2012新款,夏潮女士长,款钱包邮U"P2103-02,2012-08-09 23:30:39,ht,箱包皮具/热销女包/男包>钱包卡套>钱包卡套,129.00,包邮,744,否,37,0:正常, , '
$array = StringSplit($bbsd, '"')
$bbsd = ""
For $i = 1 To $array
        If Mod($i, 2) == 0 Then ;even
                $bbsd &= '"' & StringReplace($array[$i], ',', '.') & '"'
        Else ;odd
                $bbsd &= $array[$i]
        EndIf
Next
MsgBox(0, "", $bbsd)

就是根据双引号成对的特征。
页: [1]
查看完整版本: 请教一个正则替换的问题