gpt4 book ai didi

python - 用于在换行符处拆分的正则表达式,同时忽略由任意数量的引号包围的文本内的换行符

转载 作者:行者123 更新时间:2023-12-03 23:25:02 25 4
gpt4 key购买 nike

在 Python 中,我需要在换行符处拆分字符串,同时忽略被任意数量的引号包围的文本部分内的换行符(例如“”“这是三引号中的文本”“”,具有相同数量的引号)开头和结尾的引号)。

此示例字符串:

Line outside quotes
Another line
"Two lines inside
normal quotes"
""Two lines inside
fancy "dual" quotes""
"""Three lines inside
"even fancier"
triple quotes"""
Last line

应该生成列表:

['Line outside quotes', 'Another line', '"Two lines inside\nnormal quotes"', 
'""Two lines inside\nfancy "dual" quotes""',
'"""Three lines inside\n"even fancier"\ntriple quotes"""',
'Last line']

灵感来自 this answer from Veedrac ,我想出了以下正则表达式来匹配组:

(?:("+)[\s\S]+?\1|.)+

部分 ("+)[\s\S]+?\1 意思是“找到一些引号(匹配组),然后是任何东西(不贪婪),并且最后再次匹配组(相同数量的引号)”。

根据 RegExr.com 上的测试,此正则表达式如我所料工作:https://regexr.com/52qla

但是,如果我在 Python 中实现它,我会得到意想不到的结果。我的测试代码:

import re

input = '''Line outside quotes
Another line
"Two lines inside
normal quotes"
""Two lines inside
fancy "dual" quotes""
"""Three lines inside
"even fancier"
triple quotes"""
Last line'''

matcher = re.compile(r'(?:("+)[\s\S]+?\1|.)+')
result = matcher.findall(input)

print(str(result))

产生输出:

['', '', '"', '""', '"""', '']

这不是我所期望的。

如果我使用集成的“re”模块或“regex”模块,似乎没有什么不同。

我希望有人有想法。谢谢!

最佳答案

import re

input = '''Line outside quotes
Another line
"Two lines inside
normal quotes"
""Two lines inside
fancy "dual" quotes""
"""Three lines inside
"even fancier"
triple quotes"""
Last line'''

matcher = re.compile(r'(?:("+)([\s\S]+?)\1|(.+))', re.MULTILINE)
result = matcher.findall(input)
print(["".join(x) for x in result])

我用上面的代码做了你想要的。在 python 中,您必须添加 re.MULTILINE 以进行多行处理。对于内容导出,"[\s\S]+?" 应该被封装。

关于python - 用于在换行符处拆分的正则表达式,同时忽略由任意数量的引号包围的文本内的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61304411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com