<p>如果您不认为会有向后不匹配的parens(即“)”),您可以这样做:</p>
<pre><code>with open("myFile.txt","r") as readfile, open("outFile.txt","w") as outfile:
for line in readfile:
if line.count("(") != line.count(")") or line.count('"') % 2 != 0:
outfile.write(line)
</code></pre>
<p>否则,您将不得不一次计算一个,以检查不匹配,如下所示:</p>
^{pr2}$
<p>我想不出比这更好的办法了。Python不支持递归正则表达式,因此正则表达式的解决方案是正确的。在</p>
<p>关于这一点还有一点:考虑到您的数据,最好将其放入函数中并拆分字符串,这很容易用正则表达式来实现,如下所示:</p>
<pre><code>import re
splitre = re.compile(".*?=(.*?)(?:(?=\s*?\S*?=)|(?=\s*$))")
with open("myFile.txt","r") as readfile, open("outFile.txt","w") as outfile:
for line in readfile:
def matchParens(text):
count = 0
for char in text:
if char == ")":
count -= 1
elif char == "(":
count += 1
if count < 0:
break
return count != 0 or text.count('"') % 2 != 0
if any(matchParens(text) for text in splitre.findall(line)):
outfile.write(line)
</code></pre>
<p>这样做可能更好的原因是它单独检查每个值对,这样,如果在一个值对中有一个开放paren,在后面的一个值对中有一个闭paren,它就不会认为没有不平衡paren。在</p>