andersonljw 发表于 2012-1-5 23:47:30

得好好研究研究正则。。

sgj584520 发表于 2012-1-10 21:28:04

超版就是超版啊,牛叉的很

binghc 发表于 2012-1-11 17:55:34

本帖最后由 binghc 于 2012-1-11 18:05 编辑

回复 7# afan


    看来还是有人记得我啊,不错,哈哈!{:face (317):}
一条表达式我也搞不定,不过一行语句我倒是能搞定:

(?<=,|^)(?:"((?:[^"]+|""))"|[^,]*)要把两双引号转化成一个双引号,又想让代码尽可能的简短,要这么干:


"""",A""AAA,123456,",",12345678901234567890"",0.123456,dddddddddddd,,",,"

#include<array.au3>
$a=StringRegExp(StringRegExpReplace(ClipGet(),'""(?!")','"'),'(?<=,|^)(?:"((?:[^"]+|"))"|[^,]*)',3)
_ArrayDisplay($a)

auto 发表于 2012-1-11 19:38:52

回复 18# binghc


    嗯。。个个都是高手啊
这几天很忙没时间测试批量转换效率怎么样。

Chinacat 发表于 2012-1-11 23:38:27

我一直被正则搞定。。。

love5173 发表于 2012-1-12 17:27:32

本帖最后由 love5173 于 2012-1-12 18:32 编辑

回复 18# binghc
根据csv格式跟文本格式的转换规则,这么弄只适用于本段文本
对于"的替换规则是先去掉两头的"然后再把中间的两个"换成一个"。
我水平有限要分两步才能实现 不知道大神有没有一句搞定的方法
试试这个
$a=StringRegExp(StringRegExpReplace(ClipGet(),'(?<=")""','"'),'(?<=,|^)(?:"((?:[^"]+|"+))"|[^,]*)',3)

kevinch 发表于 2012-1-12 19:53:37

直接用excel处理吧,用正则,意外太容易发生了

netegg 发表于 2012-2-1 19:33:30

本帖最后由 netegg 于 2012-2-1 19:40 编辑

没测试过,也没细看过,lz自己对着看吧
三个文件,我也忘了到底是用哪个了,好像是1.3那个

auto 发表于 2012-2-1 20:30:06

回复 23# netegg


模拟的数据不够全面,没时间从系统导出数据来测试,

Duvet 发表于 2012-2-23 16:57:35

本帖最后由 Duvet 于 2012-2-23 16:59 编辑

上面的正則用以下字串測試結果有誤
$Text = '"""","""""",""",""""",""""",""",""""",""""",,""""""","""""""'

Duvet 試著寫成一行

#Include <Array.au3>
Local $Text = '"""",AAAA,123456,",",12345678901234567890,0.123456,dddddddddddd,,",,"'
_ArrayDisplay(StringRegExp(StringRegExpReplace(StringRegExpReplace($Text, '\G((?:"(?>""|[^"]+)*+"|[^",\v]++)?)(?:,|\v++)', "$1" & Chr(127)), '(?m)(?<=^|\x7f)"|"(?=$|\x7f)|(")"', "$1"), "(?<=^|\x7f)[^\x7f]*(?=\x7f|\Z)", 3))
Exit

shuren88 发表于 2012-2-24 10:40:24

本帖最后由 shuren88 于 2012-2-24 10:45 编辑

这个不知对楼主处理CSV格式文件是否有用,请看:

http://www.autoitx.com/forum.php?mod=viewthread&tid=30538&page=1&extra=#pid401572

曼菲士 发表于 2012-2-24 17:37:57

本帖最后由 曼菲士 于 2012-2-24 17:41 编辑

正则表达式是编程界的神曲“忐忑”,一点也不懂什么意思。

alice148 发表于 2012-3-22 15:06:19

下载看看{:face (382):}

liui 发表于 2012-3-23 08:43:52

正则~看不懂啊~

chenronting 发表于 2012-3-23 12:06:14

表示没理解。
为什么不能用下面的来表示?

#include <Array.au3>
Local $Str = '"""",AAAA,123456,",",12345678901234567890,0.123456,dddddddddddd,,",,"'
$Str=StringSplit($Str,',')
_ArrayDisplay($Str,'Debug~~~')
页: 1 [2] 3
查看完整版本: 请教CSV的正则处理