在文本文件中查找具有修复长度的数字

时间:2015-06-29 11:46:22

标签: regex notepad++

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

我可以使用[0-9]{24}选择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

用空格或换行符分隔(任何分隔符都可以。)文件中的数字并不总是相同,这只是一个显示我要做的事情的例子。

感谢。

1 个答案:

答案 0 :(得分:2)

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

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

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

设置屏幕:

enter image description here

REGEX EXPLANATION

  • (?>...) - 原子组语法,我们不会在组内回溯(它会提高性能)
  • (?:\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位及更多的序列。