正则表达式匹配空格但不包括行尾空格。

3
我将尝试将多个空格替换为一个空格,但是只在行首进行替换。
例如:
___abc___def__
___ghi___jkl__

应该转向

___abc_def__
___ghi_jkl__

请注意,我已将空格替换为下划线

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

([^\s])\s+

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

因此,如果我使用 \1_ 进行替换,就会得到以下结果:

___abc_def_ghi_jkl

我的期望与正则表达式引擎(例如PowerGREP或Visual Studio中的引擎)完全不同,它们不会表现出这种行为。


你想要做什么并不是很清楚。请编辑您的问题并添加示例字符串和预期结果。 - Toto
每当询问正则表达式时,请明确指定您使用的正则表达式方言 - bignose
3个回答

5

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

查找内容:(?<=\S)\h+(?=\S)
替换为: (一个空格)


1
问题有几种可能的解释。对于每个解释,替换内容将是一个空格字符。
- 如果 spaces 是复数且指代空格字符而不包括制表符,则使用查找字符串(^ {2,})|( {2,}$)。 - 如果 spaces 是复数且应包括制表符,则使用查找字符串(^[ \t]{2,})|([ \t]{2,}$)。 - 如果需要将任何前导或尾随空格和制表符(一个或多个)替换为空格,则使用查找字符串(^[ \t]+)|([ \t]+$)
每个表达式的一般形式都是(^...)|(...$)。竖线|表示交替,因此前面或后面的方括号表达式可以匹配。因此,查找文本可以在行的开头或结尾匹配。省略号...取决于需要匹配的内容。指定[ \t]意味着仅包含两个字符空格和制表符,而\s则包括行尾字符。

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

稍微修改了一下Toto的答案就解决了问题:

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

查找单词字符之间的任何空格以及行末的尾随空格。


请编辑问题以明确具体的问题;然后选择一个答案作为正确答案。 - bignose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接