Chinaunix
标题:
【求助】关于正则表达式,遇到一个情况,不知道如何匹配该模式,求助大牛~
[打印本页]
作者:
fzc115100
时间:
2012-06-01 11:02
标题:
【求助】关于正则表达式,遇到一个情况,不知道如何匹配该模式,求助大牛~
是一个csv文件,
以前都是以逗号“,”作为分隔符的。
但是现在遇到一个新情况类似这种:
a,"b,c,d",e
如上这行字符,我想分成三组:
a
b,c,d
e
请教应如何实现?
谢谢~
作者:
fzc115100
时间:
2012-06-01 11:04
其中a代表若干数字或字符,若干:不确定。
bcde也如此,且bcd也是若干个,即有可能是"b,c,d,e,f,g"
作者:
fzc115100
时间:
2012-06-01 11:08
但是我能却行其中的分组数量,
即我可以提供:这一行我将分成多少个组,
例如:a,"b,c,d",e 三组
a,"b,c,d",e,f,"g,h" 五组
作者:
anonymous0502
时间:
2012-06-01 11:09
本帖最后由 anonymous0502 于 2012-06-01 12:25 编辑
。。。
作者:
fzc115100
时间:
2012-06-01 11:18
貌似可以通过csv模块来实现我想要的功能,
但是我还是想知道csv模块是如何实现的?
权当锻炼脑筋了。
期待并且感谢大牛的解答!
作者:
anonymous0502
时间:
2012-06-01 12:28
好像也是用正则表达式来做的,表达式有点复杂
源代码文件有的啊
作者:
fzc115100
时间:
2012-06-01 13:02
回复
6#
anonymous0502
恕在下无知,C语言支持正则表达式吗?我不是很清楚。。。
作者:
anonymous0502
时间:
2012-06-01 13:07
回复
7#
fzc115100
这个我也不太清楚,好像标准的不支持,也要靠其它库吧
>>> import csv
>>> csv.__file__
'c:\\python32\\lib\\csv.py'
复制代码
作者:
fzc115100
时间:
2012-06-01 13:42
回复
8#
anonymous0502
是我理解有误,感谢ls!
作者:
yinyuemi
时间:
2012-06-01 13:54
回复
1#
fzc115100
有这情况么?
a,"b"c",d,e
->
a
b"c
d
e
换句话,双引号都是成对出现的么?
作者:
fzc115100
时间:
2012-06-01 14:38
回复
10#
yinyuemi
一定是成对出现的。
谢谢.
还想请教另一个问题,chinaunix回帖怎么重视需要验证码啊?
是否在一定时间或一定回帖数量之后就不在需要了?
每次都这样真的很烦。。。
作者:
anonymous0502
时间:
2012-06-01 14:45
你的发帖量多了就没有这个验证了
作者:
yinyuemi
时间:
2012-06-01 14:57
回复
11#
fzc115100
s='a,"b,c,d",e,f,"g,h",i'
re.findall("\"[^\"]+\"|[^,]+(?=,)|[^,]+$",s)
['a', '"b,c,d"', 'e', 'f', '"g,h"', 'i']
复制代码
作者:
fzc115100
时间:
2012-06-01 15:20
回复
13#
yinyuemi
非常感谢,这里引出另一个问题。
正则表达式里面的“|”的执行顺序:
先执行前面的一项,匹配一圈,然后再匹配后面的那项是这个顺序吗?
因为我改变了一下format:
re.findall("[^,]+(?=,)|\"[^\"]+\"",s)
复制代码
结果就不是那么回事儿了。。。
还想请教另一个问题:
http://bbs.chinaunix.net/thread-3750185-1-1.html
多谢了
作者:
happybj20008
时间:
2012-06-01 15:42
回复
1#
fzc115100
关键的问题就是,出现在两个"中间就不是分隔符,否则是分隔符
正则式肯定可以写,但可能比较费事
遇到这种问题我都是用一个土办法,首先把,全部用#(任意字符,只要原文中没有就行)替换,然后再把#"和"#替换成,再按照,分隔,最后把剩下的#再替换成,
a,"b,c,d",e ---> a#"b#c#d"#e --->a,"b#c#d",e
作者:
cdtits
时间:
2012-06-01 16:10
>>> s = 'a,"b,c,d",e'
>>> import re
>>> t = re.search(r'(.*?),"([^"]+)",(.*), s)
>>> print t.groups()
('a', 'b,c,d', 'e')
>>>
复制代码
作者:
fzc115100
时间:
2012-06-01 18:06
回复
15#
happybj20008
谢谢,有效!
作者:
lj2009jl
时间:
2012-06-02 12:06
回复
17#
fzc115100
有bug,对付第二个例子
'a,"b,c,d",e,f,"g,h",i'
就有问题,
作者:
fzc115100
时间:
2012-06-04 08:43
回复
18#
lj2009jl
呵呵,是的 谢谢提醒,其实第二个例子通用性不强,只针对一种情况的匹配。
感谢一下表示对回答我问题的人的尊敬。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2