用于在子字符串中用破折号替换空格的正则表达式。

问题描述 投票:4回答:6

我一直在努力寻找一种方法,用字符串中的破折号代替空格,但只能替换字符串中特定部分内的空格。

来源:

ABC *This is a sub string* DEF

我尝试使用正则表达式

/\s/g

如果我使用正则表达式匹配空格并替换,则会得到以下结果:

ABC-*This-is-a-sub-string*-DEF

但是我只想替换两个星号包围的文本中的空格。

这是我想要实现的目标:

ABC *This-is-a-sub-string* DEF

不确定启用了正则表达式的TextMate中的查找和替换选项时,为什么我要使用正则表达式的类型。

重要的是,我将在其上运行此正则表达式搜索和替换的字符串将具有不同的文本,但这只是我要匹配的星号内的空格。

任何帮助将不胜感激。

regex string replace textmate
6个回答
3
投票

要识别被星号包围的空格,关键的观察结果是,如果星号仅成对出现,则您要查找的空格将始终跟随奇数个星号。

正则表达式

\ (?=[^*]*\*([^*]*\*[^*]*\*)*[^*]*$)

将匹配应替换的一次。 Textmate必须支持前瞻性断言才能起作用。


3
投票
s/(?<!\*)\s(?!\*)(?!$)/-/g

如果TextMate支持Perl样式的正则表达式命令(抱歉,我没有这方面的经验,这是一种单行代码,应该可以使用。


1
投票

尝试这个

/(?<=\*.*)\s(?=.*\*)/g

但是如果您想在JavaScript中使用它,它将无法在javascript中工作,因为它还使用了lookbehind,而js不支持该方法。>


0
投票

尝试一下:\s(\*[^*]*\*)\s。它将与组1中的*This is a sub string*相匹配。然后替换为-$1-


0
投票

使用此正则表达式从星号中获取空格(.)(*(.(\ ).)*)(.)取正则表达式{4}提供的数组的第4个元素,并用破折号代替。


0
投票

这取决于您的编程语言,但是在许多语言中,您可以将lambda函数与正则表达式替换语句一起使用,从而对子字符串执行进一步的替换。

© www.soinside.com 2019 - 2024. All rights reserved.