给定字符串
S = "(45171924,-1,'AbuseFilter/658',2600),(43795362,-1,'!!_(disambiguation)',2600),(45795362,-1,'!!_(disambiguation)',2699)"我想提取括号内的所有内容,除非父母在引号中。到目前为止,我已经设法在括号内得到了所有的东西,但是我不知道如何停止在引号内的内括号上分裂。我目前的代码是:
import re
S = "(45171924,-1,'AbuseFilter/658',2600),(43795362,-1,'!!_(disambiguation)',2600),(45795362,-1,'!!_(disambiguation)',2699)"
p = re.compile( "\((.*?)\)" )
m =p.findall(S)
for element in m:
print element我想要的是:
45171924,-1,'AbuseFilter/658',2600
43795362,-1,'!!_(disambiguation)',2600
45795362,-1,'!!_(disambiguation)',2699我现在得到的是:
45171924,-1,'AbuseFilter/658',2600
43795362,-1,'!!_(disambiguation
45795362,-1,'!!_(disambiguation我能做些什么来忽略内部的帕伦?
谢谢你!!
为了防止有帮助,下面是我看过的线程:
发布于 2015-04-19 04:33:07
发布于 2015-04-19 04:46:44
for element in S[1:-1].split('),('):
print element发布于 2015-04-19 06:32:34
你可以用下面的正则表达式。
>>> import re
>>> s = "(45171924,-1,'AbuseFilter/658',2600),(43795362,-1,'!!_(disambiguation)',2600),(45795362,-1,'!!_(disambiguation)',2699)"
>>> for i in re.findall(r"\(((?:'[^']*'|[^()])*)\)", s):
print(i)
45171924,-1,'AbuseFilter/658',2600
43795362,-1,'!!_(disambiguation)',2600
45795362,-1,'!!_(disambiguation)',2699解释:
\( -匹配文字(符号)。( -捕获组的开始。(?:'[^']*'|[^()])* - '^'*‘部件贪婪地匹配单引号块。如果有任何(,)符号在里面,它不会关心这一点。因为我们使用的是[^']*,它匹配任何字符,但不匹配',0次或多次。如果下面的字符不是单个引号块的开始,则该控件将转移到|符号(即[^()] )旁边的模式,该模式与任何字符匹配,但不匹配(或)。因此,整个(?:'[^']*'|[^()])*将匹配单个引用的块或任何字符(不包括(、)、0次或多次)。)末端。\)文字)符号。https://stackoverflow.com/questions/29725739
复制相似问题