【发布时间】:2018-12-06 12:02:49
【问题描述】:
我正在尝试使用以下代码拆分逗号分隔的字符串。我的一门在线课程中使用了逗号分隔的正则表达式代码。我试图通过环视它的工作原理来理解以下正则表达式,但无法完全理解。有人可以告诉我它是如何工作的吗?
我知道 ?: 用于非捕获组, ?= 用于向前看,但不确定它在当前上下文中的工作方式。
import re
pattern = re.compile(r',(?=(?:[^"]*"[^"]*")*[^"]*$)')
text = 'tarcac,"this is, test1","this is, test2", 123566, testdata'
results= re.split(pattern, text)
for r in results:
print(r.strip())
输出是
tarcac
"this is, test1"
"this is, test2"
123566
testdata
【问题讨论】:
-
您的正则表达式在双引号外的逗号上拆分
-
感谢 anubhava.. 我可以知道为什么我需要这个 (?:[^"]*"[^"]*") 以及为什么不简单地这个 (?:"[^"]*" )
-
因为前瞻必须提前计算偶数个引号,以确保拆分逗号在引号之外。
-
永远不要在生产中使用这个正则表达式,它效率太低并且可能会冻结你的代码。在 Python 中,有一个内置的 CSV 解析器,使用它。
-
感谢 Wiktor... 会试试的
标签: python regex regex-lookarounds