Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python reg ex包含缺少的逗号_Python_Regex_Python 2.7 - Fatal编程技术网

python reg ex包含缺少的逗号

python reg ex包含缺少的逗号,python,regex,python-2.7,Python,Regex,Python 2.7,我需要确保字符串具有逗号分隔的值。我读取的字符串可能有空格分隔的值 输入字符串中可能缺少一些逗号,也就是说,如果存在没有逗号的空格分隔值,则必须包含逗号 我不应该对单引号或双引号内的字符串进行任何更改。这些带引号的值可以包括除引号以外的任何字母数字 示例字符串为: """ 1, ' unchanged 1' " unchanged 2 " 2.009, -2e15 """ 我应该在“notthis1”和“notthis2”后面加逗号 所以我的结果字符串应该是: """1,' uncha

我需要确保字符串具有逗号分隔的值。我读取的字符串可能有空格分隔的值

  • 输入字符串中可能缺少一些逗号,也就是说,如果存在没有逗号的空格分隔值,则必须包含逗号
  • 我不应该对单引号或双引号内的字符串进行任何更改。这些带引号的值可以包括除引号以外的任何字母数字
示例字符串为:

""" 1, ' unchanged 1' " unchanged  2 "  2.009, -2e15 """
我应该在“notthis1”和“notthis2”后面加逗号

所以我的结果字符串应该是:

"""1,' unchanged 1'," unchanged 2 ",2.009,-2e15"""
我一直在尝试
s1 | s2 |(s3)
type正则表达式。但未能完成任务


字符串可以有不同数量的值以逗号分隔。

PyParsing肯定不是最快的运行方式,但它可能是最快的写入方式;-)

哪张照片

1, ' unchanged 1', " unchanged  2 ", 2, 2
1, ' unchanged 1', " unchanged 2 ", 2, 2
1, ' unchanged 1', " unchanged 2 ", 2, 2, 45
1, 67.90e-34, 67.90E-34, 7.9093339333, 2, 2

也许使用findall、str.join和str.strip会更容易,首先查找引号之间的字符串,然后查找所有非空格:

s = """ 1, ' unchanged 1' " unchanged  2 "  2.009, -2e15 3"""

r = re.compile("[\'\"].*?[\'\"]|\S+")
print(", ".join([x.strip(",") for x in r.findall(s)]))

1, ' unchanged 1', " unchanged  2 ", 2.009, -2e11, ' unchanged 1', " unchanged  2 ", 2.009, -2e15, 35, 3
如果逗号后不需要空格,请执行以下操作:

print(",".join([x.strip(",") for x in r.findall(s)]))
1,' unchanged 1'," unchanged  2 ",2.009,-2e15,3

你的意思是像
(re.sub(r)([\'\'\'].*?[\'\'\']])\s,r“\1,”,s)
?不同的字符串可以有不同数量的值以逗号分隔。例如,如果我将字符串更改为““1”,则“未更改1”;“未更改2”2,2 45“”Padraic的re似乎不起作用。PyParsing可能是一种更具可读性的方法,如果这是一个选项的话…?我将从一个文件中读取这些行,该文件的行数在几十行到大约100k之间。如果PyParsing没有显著地降低我的整个过程的速度,它是我的一个选项。
“1,'unchanged 1'”未更改的2“2,2 45”
输出?感谢您提出解决方案。我必须说这里的数字可以是浮点数。例如“1,67.90e-34 67.90e-34 7.9093339333 2,2”。我明天会检查性能,以计算时间消耗。我现在无法访问大文件。谢谢他们。让我明天检查性能,并让您知道。fwiw,我在一台像样的i7上获得5185行/秒(不包括任何内容,但包括解析),与@Padraic Cunningham的正则表达式解决方案的185430行/秒相比,他的版本不能处理缺少的空格,尽管““1”未更改1““2”未更改2,2 45”;-)b约恩:在这种情况下,两个值之间不会缺少空格。如果是这样,我将不得不使用这种方法。非常感谢您为我评估绩效。我想我会选择Padraic的解决方案,因为它的速度和当前的范围。出现了额外的要求:逗号分隔的值之间可能没有空格。对于等式,我的示例字符串可以是“”“1,'未更改的1'”未更改的2“2.009,-2e15“”(在第一个1和逗号之间没有空格)。逗号前后可能有多个逗号分隔的值,但没有空格。但是,两个非逗号分隔的值之间将有一个或多个空格。此外,引号或双引号字符串中也可以有逗号。但这些都不应该改变。例如,“667000”,“02”,“100.0'spa ces',10”“”应该返回给我“667000”,“02”,“100.0',spa ces',10”“”。我回到我的膝上时会看一看
print(",".join([x.strip(",") for x in r.findall(s)]))
1,' unchanged 1'," unchanged  2 ",2.009,-2e15,3