剥离第一个空格到行尾

时间:2014-12-24 18:24:19

标签: regex textmate

我试图使用正则表达式的查找和替换将第一个空格去除TextMate中文本文​​件的每一行的行尾。

例如,我想替换以下行:

One, 2, Three!

使用:

One,

我查看过this个问题,但我真的不明白如何使用已接受的答案。它似乎匹配整条线,而不是第一个空格。

我是否需要使用lookbehind匹配第一个空格?

我开始尝试:

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

如果有空格,则匹配整行,但是一行上没有空格,它一次匹配两行。

当我拥有正确的正则表达式时,我是否只需将其放入"查找"框和点击"全部替换"使用"替换"盒子空白?我也不太了解"替换模式"回答者在我链接的问题中谈论的语法。

感谢。

编辑2018年8月9日:这似乎得到了一些观点。如果有人希望使用命令行工具执行此操作,您可以尝试:

awk '{print $1}' myfile.txt > output.txt

或写回您可以执行的同一文件:

awk '{print $1}' myfile.txt | sponge myfile.txt

这将占用任何空格之前的第一列,包括制表符。具体分割空格:

cat myfile.txt | cut -d ' ' -f 1 > output.txt

2 个答案:

答案 0 :(得分:3)

没有一个正确的正则表达式。有很多方法可以做到这一点。你可以使用lookbehind,但没有必要。如何实际使用正则表达式还取决于模式的设计方式 - 您可能不得不替换任何内容,或者您​​可能必须替换为比正则表达式模式本身更复杂的花哨文本。 / p>


可能最简单的模式是.*(?:\n|$) - 什么都不替换。 (注意点前面的空格。)

另一个是^(.*?) .*?$,需要多线修改器才能工作。这个使用起来比较棘手:你必须用\1替换。此替换模式引用正则表达式捕获的文本 - 在本例中为所有文本,直到第一个空格。如果省略此项,则将删除包含空格的所有行。

答案 1 :(得分:1)

我没有Textmate,但是Regexr说这应该有效:

^([^\s]*)([^\n]+)*$

主要区别在于,它不会捕获任何字符后跟任何字符,而只捕获除换行符之外的任何内容。