正则表达式匹配空间但行尾

时间:2015-02-21 11:59:14

标签: regex

我正在尝试用一个空格替换多个空格,但是在行的开头。

示例:

___abc___def__
___ghi___jkl__

应转向

___abc_def__
___ghi_jkl__

请注意我用下划线替换空格

使用以下模式进行简单搜索:

([^\s])\s+

匹配第一行末尾的空格,直到下一行开头的空格

所以,如果我用\ 1替换,我得到以下内容:

___abc_def_ghi_jkl

这绝对不是我所期望的和正则表达式引擎,例如powergrep或视觉工作室中的那个不会那样。

3 个答案:

答案 0 :(得分:3)

如果您只想匹配水平空格,请使用\h

找到:(?<=\S)\h+(?=\S)
替换为:(空格)

答案 1 :(得分:1)

对这个问题有几种可能的解释。对于它们中的每一个,替换将是单个空格字符。

  • 如果空格是复数并且表示空格字符但不是标签,则使用 查找字符串(^ {2,})|( {2,}$)

  • 如果空格是复数且应包含制表符,则使用查找字符串 (^[ \t]{2,})|([ \t]{2,}$)

  • 如果有任何前导或尾随空格和制表符(一个或多个) 替换为空格然后使用(^[ \t]+)|([ \t]+$)的查找字符串。

每个的一般形式是(^...)|(...$)|表示交替,因此前面或后面的括号表达式可以匹配。因此,找到在行的开头或结尾可以匹配的文本。 ...根据需要匹配的内容而有所不同。指定[ \t]仅表示空格和制表符两个字符,而\s包含行尾字符。

答案 2 :(得分:0)

好的,所以当然要取代它:

&nbsp;&nbsp;Hey diddle&nbsp;&nbsp;&nbsp;diddle,&nbsp;&nbsp;\n<br/>
&nbsp;&nbsp;The&nbsp;&nbsp;&nbsp;Cat and the fiddle,\n

用这个:

&nbsp;&nbsp;Hey diddle diddle,\n<br/>
&nbsp;&nbsp;The Cat and the fiddle,\n

一个稍微修改过的版本的je suis charlie的回答就是这个诀窍:

(?<=\S)\h+(?=\S)|\s+$

在行尾的字符和尾随空格之间找到任何空格

感谢您的回答!