【问题标题】:Regex Split after 20 characters20 个字符后的正则表达式拆分
【发布时间】:2011-06-07 23:57:26
【问题描述】:

我有一个固定宽度的文本文件,其中每个字段总共有 20 个字符。通常只使用 5 个字符,然后是尾随空格。我想使用 Split 函数来提取数据,而不是 Match 函数。有人可以帮我用正则表达式吗?提前致谢。

【问题讨论】:

  • 正则表达式适用于哪种语言?你必须使用正则表达式吗?

标签: regex


【解决方案1】:

我会使用字符串操作而不是正则表达式来做到这一点。如果您使用的是 JavaScript:

var results = [];

for (i = 0; i < input.length; i += 20) {
    results.push(input.substring(i, i + 20));
}

或修剪空白:

var results = [];

for (i = 0; i < input.length; i += 20) {
    results.push(input.substring(i, i + 20).replace(/^\s+|\s+$/g, ''));
}

如果你必须使用正则表达式,它应该是 .{20} 之类的。

【讨论】:

  • 至少在 C# 中,以下内容会在最后一次迭代中产生索引错误:input.substring(i, i + 20));
  • @Doug - 我也想过。在w3schools' JavaScript sandbox 中测试它没有任何问题。看起来substring 采用了最长的子字符串,有点类似于 LINQ 中的 IEnumerable.Take(int)
【解决方案2】:

拆分空格并获取第一个返回的元素。这是假设您在实际数据中没有空格。

干杯

【讨论】:

    【解决方案3】:

    如果你必须:

    ^(.{20})(.{20})(.{20})$ // repeat the part in parentheses for each field
    

    您仍然需要修剪每个字段以删除尾随空格。

    使用substr() 或您的等效语言似乎更简单。或者在 PHP 中你可以使用str_split($string, 20)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      • 1970-01-01
      相关资源
      最近更新 更多