在文本文件中查找固定长度的数字

find numbers with fix length in text file

我有一个没有任何特定格式的文本文件。它包含文本和数字。我只想获得 24 位数字。 我想删除所有多余的文本,并用 space 或换行符 分隔这些数字。

我可以使用 [0-9]{24} select 24 位数字,但我想删除所有多余的文本并保留数字。

例如,如果文件是这样的:

asafa sfasd asd 123 15 1 asd ad7a sd78a6s da87ds6a 8s7d .123 1.
32 141.23 . 123456789012345678901234 asafa sfasd asd 123 15 1 asd ad7a sd78a6s da87ds6
a 8s7d .123 1.32 141.23 . 123456789012345678901234 asafa sfasd asd 123 15 1 asd ad7a sd78a6s da87ds6a 8s7d .12
3 1.32 141.23 . 123456789012345678901234 asafa sfasd asd 123 15 1 asd ad7a sd78a6s da87ds6a 8s7d .123 1.32 141.23 . 123456789012345678901234 

我想得到

123456789012345678901234 123456789012345678901234 123456789012345678901234 123456789012345678901234

由 space 或换行符分隔(任何分隔符都可以。)文件中的数字并不总是相同的,这只是展示我将要做的事情的示例。

谢谢。

您可以使用以下正则表达式并替换为空字符串:

(?>(?:\D|(?<!\d)\d{1,23}(?!\d)|(?<!\d)\d{25,}(?!\d))+)

它将匹配所有不是数字的文本,或不是 24 个符号长的数字。

设置屏幕:

正则表达式解释:

  • (?>...) - 原子组语法,我们不在组内回溯(它提高了性能)
  • (?:\D|(?<!\d)\d{1,23}(?!\d)|(?<!\d)\d{25,}(?!\d))+ - 一个非捕获组,我们在其中列出使用 | 交替运算符列出的备选方案(我们要匹配的模式):
    • \D - 非数字
    • (?<!\d)\d{1,23}(?!\d) - 任何 1 到 23 位数字的序列,前面没有数字(由于负向后视 (?<!\d)),并且后面没有数字(由于负面展望 (?!\d))
    • (?<!\d)\d{25,}(?!\d) - 与上面类似,但它匹配 25 位及更多数字的序列。