我们希望将出现在换行符(\r\n
、\n
或\r
)之间的字符组合在一起,但忽略引号内的换行符。像这样:
test = 'hello \r\n you, hi, hola, "hei\nhei", hej\r\nhello, hi, hola, "hei\nhei", "hej\r\ngreat", you?'
match -> hello
match -> you, hi, hola, "hei\nhei", hej
match -> hello, hi, hola, "hei\nhei", "hej\r\ngreat", you?
我们设法得到了一些可以满足我们大多数需求的功能,但它不会忽略引号中的换行符:
^{pr2}$所以我们尝试了一种不同的方法:创建一种模式,找到我们想要排除的模式,然后尝试否定它:
In [344]: [r for r in re.finditer(r'(\r\n|\n)(?=(?:[^"]*"[^"]*")*[^"]*\Z)', test)]
Out[344]:
[<_sre.SRE_Match object; span=(6, 8), match='\r\n'>,
<_sre.SRE_Match object; span=(38, 40), match='\r\n'>]
但我们不知道如何正确地否定它。我们使用re.finditer()
而不是{
您可以使用
([^"\r\n]*(?:"[^"]+"[^"\r\n]*)*)
。在这样,您将发现任何没有换行符的字符串,也没有可以在引号中后跟任意数量字符串的引号。在
Demo.
将输出:
^{pr2}$相关问题 更多 >
编程相关推荐