我有一个没有任何特定格式的文本文件。它包含文本和数字。我想只获得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
用空格或换行符分隔(任何分隔符都可以。)文件中的数字并不总是相同,这只是一个显示我要做的事情的例子。
感谢。
答案 0 :(得分:2)
您可以使用以下正则表达式并替换为空字符串:
(?>(?:\D|(?<!\d)\d{1,23}(?!\d)|(?<!\d)\d{25,}(?!\d))+)
它将匹配所有非数字的文本或不是24个符号的数字。
设置屏幕:
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位及更多的序列。