正则表达式处理长行

regex working with long lines

我在一个 txt 文件中得到了很多这样的字符串:

X00NAP-0111-OG02Flur-A  2     AIR-CAP2702I-E-K9     00:b8:b8:b8:7d:b8          0111-HGS  DE       10.100.100.100   8   
X006NAP-0500-EG00Grossrau-A  2     AIR-CAP2702I-E-K9     50:0f:80:94:82:c0          HGS 0500  DE       10.100.100.100   1   
Y008NAP-8399-OG04OE3020-A  2     AIR-CAP2702I-E-K9     00:b8:b8:b8:7d:b8  HGS Erfurter Hof  DE       10.100.100.100   1   
A1234NAP-4101-OG02Raum237-A  2     AIR-CAP2602I-E-K9     00:b8:b8:b8:7d:b8  AP 2 Anmeldung V  DE       10.100.100.100   0   

我只对第一个字符串和行尾的数字感兴趣。数量可以是最大的。 99 所以最后我想要这样的输出:

X00NAP-0111-OG02Flur-A 8   
X006NAP-0500-EG00Grossrau-A 1   
Y008NAP-8399-OG04OE3020-A 1   
A1234NAP-4101-OG02Raum237-A 0

我用正则表达式尝试了很多东西,但没有任何效果。

这是一个通用的正则表达式解决方案:

查找:

^([^\s]*).*(\d+)$

替换:

 

这里的想法是将第一个字符串和最后一个数字匹配为 capture 组,这由括号中的模式中的两个术语表示。这些捕获组在替换中可用 </code> 和 <code>(有时 </code> 和 <code>,具体取决于正则表达式 tool/engine)。我们可以用这些捕获组替换每一行,让您得到您期望的输出。

请注意,这可能是"trash"原始文件,但如果您使用的是Notepad++之类的工具,您可以简单地将此结果复制出来,然后撤消替换,或者直接关闭原始文件而不保存。

Demo

我能想到的最简单的方法是:

Find: " .* "
Replace: " "

这将从第一个 space 到最后一个 space 的所有内容替换为单个 space,实现您的目标。

注意:引号仅用于帮助显示 space 在正则表达式中的位置。