【问题标题】:perl split string on a single char, not on repeated charperl 在单个字符上拆分字符串,而不是在重复的字符上
【发布时间】:2012-11-01 10:38:11
【问题描述】:

我正在使用现有的 perl 脚本来处理来自我无法控制的数据库查询的文本文件输出。

数据包含由“|”分隔的字段,但某些字段包含“||”。没有空字段。字段分隔符两侧可能有空格,我也想删除。

除了更改“||”之外,我找不到实现此目的的简单方法换成别的东西,在分裂后把它hack,这似乎有点沉重。

文件很大(通常高达约 100M)。

使用split(/ *\| */, $line) 可以与“||”分开使用字符。

有什么想法吗?

【问题讨论】:

    标签: perl split char


    【解决方案1】:
    split /\s*(?<!\|)\|(?!\|)\s*/
    

    【讨论】:

    • 当有人告诉我怎么做时很简单。效果很好,而且比我的删除和替换更快(不足为奇)。
    【解决方案2】:

    您可以使用否定的后视和前瞻来确保您要拆分的 | 周围没有 | 符号:

    split / \s* (?<!\|) \| (?!\|) \s* /x
    

    【讨论】:

      【解决方案3】:

      查看使用Text::CSVTie::Handle::CSV 运行文件。如果文本文件已正确完成,包含 || 的字段将被引用。

      【讨论】:

      • 我认为我的问题开始是因为用户输入没有输入数据保护。我想接下来的事情是有人使用单管,那我得重新考虑一下!感谢您的宝贵时间
      猜你喜欢
      • 2011-01-08
      • 2015-11-20
      • 2020-04-17
      • 1970-01-01
      • 2013-10-18
      • 2010-09-27
      • 2015-08-29
      • 2011-08-28
      • 2014-12-11
      相关资源
      最近更新 更多