找回密码
 加入
搜索
查看: 3750|回复: 8

[效率算法] 请教一个正则替换的问题

  [复制链接]
发表于 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)
请教下,如何用正则表达式将双引号内的逗号替换成句号
谢谢!
 楼主| 发表于 2012-8-21 18:41:42 | 显示全部楼层
求高手给予解答,谢谢
发表于 2012-8-21 19:27:14 | 显示全部楼层
是不是这个原因:
? (after a repeating character)        
Find the smallest match instead of the largest.
发表于 2012-8-21 21:45:13 | 显示全部楼层
[quote]选购",14733251131,迪士尼米奇女包包专柜正"品[\quote]

这不算两个双引号之间?
 楼主| 发表于 2012-8-22 09:57:53 | 显示全部楼层
回复 4# user3000

引号需要配对的,我主要的目的是用于分析csv格式的文件
,"xxxxx",格式为这样
发表于 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[0]
        If Mod($i, 2) == 0 Then ;even
                $bbsd &= $array1[$j]
                $j += 1
        Else ;odd
                $bbsd &= $array2[$i]
        EndIf
Next
MsgBox(0, "", $bbsd)

评分

参与人数 1金钱 +30 收起 理由
35888894 + 30 感谢!

查看全部评分

发表于 2012-8-22 21:38:02 | 显示全部楼层
左右双引号有区别吗?
发表于 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 = "(.*)(""[^""]*"").*"说明:[^""]*任意个非双引号的字符

评分

参与人数 1金钱 +30 收起 理由
35888894 + 30 感谢!~

查看全部评分

发表于 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[0]
        If Mod($i, 2) == 0 Then ;even
                $bbsd &= '"' & StringReplace($array[$i], ',', '.') & '"'
        Else ;odd
                $bbsd &= $array[$i]
        EndIf
Next
MsgBox(0, "", $bbsd)


就是根据双引号成对的特征。

评分

参与人数 1金钱 +30 收起 理由
35888894 + 30 感谢!

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-1 08:18 , Processed in 0.079455 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表