【问题标题】:Finding numbers with a specific length from csv file从 csv 文件中查找具有特定长度的数字
【发布时间】:2022-10-04 21:53:28
【问题描述】:

我正在处理来自客户的 csv 文件,该文件包含大量数据。数据是从 SQL 数据库中提取的,因此逗号表示不同的列。在其中一列中有 10 位数字。由于某种原因,所有以 0 开头的 10 位数字都已转换为 9 位数字,而 0 已被删除。我需要找到所有这些实例并在 9 位数字的开头插入一个 0。

数据中的一个复杂之处是另一列也包含 9 位数字,这些不需要修改。但是,我可以假设所有这些数字都以 0 开头,而我需要找到的所有数字都不以 0 开头。

我目前正在使用 notepad++ 尝试解决问题,并找到了正则表达式 \d{9} ,它可以找到所有 9 位数字,但这不是我想要的

下面我有一个数据看起来如何的例子。需要转换所有 9 位数字的列在左侧,另一列需要转换为 9 位数字的列在右侧。 导致问题的数据示例可能是:

Column 1 Column 2
2323232323 002132413
231985313 004542435

在这个例子中,我需要找到第 1 列的第二行并在数字前面插入一个 0。

【问题讨论】:

    标签: csv notepad++


    【解决方案1】:
    • Ctrl+H
    • 查找内容:(?!0)d{9}
    • 替换为:0$0
    • 打钩 环绕
    • 选择 正则表达式
    • 全部替换

    解释:

              # word boundary, make sure ae haven't digit before
    (?!0)       # negative lookahead, make sure the next character is not 0
    d{9}       # 9 digits
              # word boundary, make sure ae haven't digit after
    

    替代品:

    0           # 0 to be inserted
    $0          # the whole match (i.e. 9 digts)
    

    截图(之前):

    截图(之后):

    【讨论】:

      【解决方案2】:

      使用记事本++ 做CTRL + H(搜索和替换实用程序)。

      • 打勾Regular Expression
      • 找到什么? ([^0-9])(d{9})([^0-9])
      • 替换为 ?

      解释 :

      ([^0-9])(d{9})([^0-9]) 匹配每边由非数字包围的 9 位数字(包括换行符/逗号等):

      • 每个(....)“捕获”一个组以供以后使用(在“替换”中)。
      • [^0-9] 是非数字字符
      • d{9} 是一个 9 位数字

      是在第一个捕获组 之后的 0 (这里只是一个字符)后跟 9 位数字(第二个捕获组:)和该数字之后的字符(第 3 个)捕获组:)。

      【讨论】:

      • 如果数字在一行的开头,这不起作用。或者在最后。
      • 确实如此。如果数字位于文件的开头或结尾,则它不起作用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多