在文本文件中查找固定长度的数字
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 位及更多数字的序列。
我有一个没有任何特定格式的文本文件。它包含文本和数字。我只想获得 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 位及更多数字的序列。