在 python 中解析字符串:如何分割换行符,同时忽略引号内的换行符

2024-02-26

我有一个需要用 python 解析的文本。

这是一个字符串,我想将其拆分为行列表, 但是,如果换行符 (\n) 在引号内,那么我们应该忽略它。

例如:

abcd efgh ijk\n1234 567"qqqq\n---" 890\n

应解析为以下几行的列表:

abcd efgh ijk
1234 567"qqqq\n---" 890

我已经尝试过split('\n'),但我不知道如何忽略引号。

任何想法?

Thanks!


这是一个更简单的解决方案。

匹配组(?:"[^"]*"|.)+。即,“引号中的内容或不是换行符的内容”。

Example:

import re
re.findall('(?:"[^"]*"|.)+', text)

NOTE:这会将多个换行符合并为一个,因为空白行将被忽略。为了避免这种情况,也给出一个 null 情况:(?:"[^"]*"|.)+|(?!\Z).

The (?!\Z)是一种令人困惑的说法“不是字符串的结尾”。这(?! )是负前瞻;这\Z是“字符串的结尾”部分。


Tests:

import re

texts = (
    'text',
    '"text"',
    'text\ntext',
    '"text\ntext"',
    'text"text\ntext"text',
    'text"text\n"\ntext"text"',
    '"\n"\ntext"text"',
    '"\n"\n"\n"\n\n\n""\n"\n"'
)

line_matcher = re.compile('(?:"[^"]*"|.)+')

for text in texts:
    print("{:>27} → {}".format(
        text.replace("\n", "\\n"),
        " [LINE] ".join(line_matcher.findall(text)).replace("\n", "\\n")
    ))

#>>>                        text → text
#>>>                      "text" → "text"
#>>>                  text\ntext → text [LINE] text
#>>>                "text\ntext" → "text\ntext"
#>>>        text"text\ntext"text → text"text\ntext"text
#>>>    text"text\n"\ntext"text" → text"text\n" [LINE] text"text"
#>>>            "\n"\ntext"text" → "\n" [LINE] text"text"
#>>>    "\n"\n"\n"\n\n\n""\n"\n" → "\n" [LINE] "\n" [LINE] "" [LINE] "\n"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 python 中解析字符串:如何分割换行符,同时忽略引号内的换行符 的相关文章

随机推荐

  • NSSpeechRecognizer 示例

    好的 所以我需要这样做 等待命令 晚安 然后运行一个动作 有人可以解释如何实现这一点吗 试试这个网站 http www cocoadev com index pl NSSpeechRecognizer http www cocoadev c
  • R 中带有 rCharts 的 nvd3 scatterPlot:增加标签的字体大小?

    我正在尝试增加使用创建的图中 x 轴和 y 轴的字体大小 NVD3 和 rCharts 这是我的情节代码 任何帮助表示赞赏 n1 lt nPlot pValues Chr data dat type scatterChart height
  • Git rebase 更改作者? [复制]

    这个问题在这里已经有答案了 所以我愚蠢地在一台未配置 git 的机器上进行了 3 次提交 没有作者或电子邮件 并且我想将这 3 次提交 尚未推送 作者更改为他们应该的内容 I know git commit amend可以换作者 但是怎么才
  • Android-按下按钮时将文本视图添加到布局

    现在我有一个文本字段 其下方有一个按钮 add 我想做到这一点 以便每次在文本字段中输入文本并按下 添加 按钮时 都会将一个新的文本视图添加到其下方的垂直布局中 并包含用户在该字段中键入的文本 我不想简单地使文本视图不可见 然后在单击时可见
  • Java 线程示例? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 谁能给出一个示例程序 以简单的方式解
  • BaseAdapter 类不会在 Asynctask 中 setAdapter - Android

    我有一个收集用户名 评论和数字的 asynctask 它将它们放入字符串中 然后调用 BaseAdapter 类 创建一个适配器 并将适配器设置为该类 但我的代码不起作用 它使应用程序崩溃 这是我的代码 public class Dashb
  • 试图根据具体情况抑制覆盖是错误的吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我明白为什么通过方法重写实现的多态性非常有用 我问的是 在某些情况下 当多态对象作为参数被接收时 而不是在定义其类时 尝试抑制它可能会出现什么问
  • 如何将 OpenSSL 密钥文件导入 Windows 证书存储区

    我有 OpenSSL 生成的 PEM 格式的 X 509 证书及其关联的密钥文件 连接到原型服务器时需要此证书进行身份验证 这在 Linux 上运行良好 我一直在使用 Microsoft SChannel API 在 Windows 平台上
  • MVC 中的点击计数器

    我正在尝试在 ASP NET MVC 中为网站的不同部分构建一个点击计数器 知道执行此操作的最佳位置在哪里 或者有一个好的方法吗 我们想要跟踪网站各个部分的点击量 根据您想要的粒度 以下是一些选项 您可以实施一个动作过滤器属性 http m
  • Android 设备监视器已禁用

    我刚刚开始 Android 开发并正在设置安卓工作室 http developer android com sdk index html在我的Mac上 按照说明here http vimeo com 113893631 当尝试运行一个简单的
  • Android 意图有时会“处理”而不是 ACTION_SEND

    我的应用程序应该处理共享文本 例如来自亚马逊应用程序的 URL 因此 我将以下意图过滤器添加到我的主要活动中
  • React Native - 将道具从一个屏幕传递到另一个屏幕(使用选项卡导航器进行导航)

    我需要将数据从主屏幕传递到第二屏幕 如果我单击主屏幕上的按钮导航到 SecondScreen 有大量示例说明如何执行此操作 但找不到任何显示如何传递到 SecondScreen 如果我使用 v2 底部选项卡导航器 的内容从主屏幕到第二屏幕
  • 在 JavaScript 中,可迭代对象应该是可重复迭代的吗?

    我发现有些iterable可以重复迭代 const iterable Symbol iterator function yield 1 yield 3 yield 5 console log iterable console log ite
  • 我可以在 mongodb 的 NodeJS 驱动程序中手动指定 BSON 类型吗?如果我使用“$numberLong”,则会出现错误

    这就是我在将文档对象插入集合之前构建文档对象的方式 function newTupple name email return email email name name account status email verified I wan
  • 如何扭曲图像[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在做一个项目 我们需要扭曲图像 基本上 我想拍摄这张图片 并将其变成这样 请注意 文字也变形了 老实说 我不知道如何去做 所以任何帮助
  • 我什么时候应该使用 sed,什么时候应该使用 awk [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 解密 Android 设备上加密的字符串

    在 Android 4 4 设备上 已使用 spring android auth 1 0 1 RELEASE 模块中的 org springframework security crypto encrypt AndroidEncrypto
  • 在 LINQ to SQL 下管理不同开发人员的连接字符串

    使用 Subversion 中的源代码 当两台不同的计算机具有不同的连接字符串时 我会遇到问题 LINQ to SQL 设计器似乎只喜欢具有相同的连接字符串 设计者是否可以使用因开发人员具有不同的本地配置而变化的连接字符串 但 Web 应用
  • 如何开始使用 ReactJS Hello World 示例?

    我正在使用 MacBook Pro 我更喜欢在虚拟机中使用 ubuntu 进行 Web 开发 我在 Macbook 中创建了一个 index html 然后只需使用 Chrome 打开它 html 是按照此创建的video https eg
  • 在 python 中解析字符串:如何分割换行符,同时忽略引号内的换行符

    我有一个需要用 python 解析的文本 这是一个字符串 我想将其拆分为行列表 但是 如果换行符 n 在引号内 那么我们应该忽略它 例如 abcd efgh ijk n1234 567 qqqq n 890 n 应解析为以下几行的列表 ab