正则表达式用子字符串中的短划线替换空格。

时间:2011-07-29 11:53:46

标签: regex string replace textmate

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

来源:

ABC *This is a sub string* DEF

我尝试使用正则表达式

/\s/g

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

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

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

以下是我要实现的目标:

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

我不知道为什么我正在使用正则表达式的类型,因为我在启用了正则表达式选项的TextMate中使用了find和replace。

重要的是要注意我将运行此正则表达式搜索和替换的字符串将具有不同的文本,但它只是我想要匹配的星号中的空格。

任何帮助将不胜感激。

6 个答案:

答案 0 :(得分:2)

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

如果TextMate支持Perl样式的正则表达式命令(我没有这方面的经验,抱歉),这是一个应该有效的单行程序。

答案 1 :(得分:2)

为了识别被星号包围的空间,关键的观察是,如果星号只是成对出现,那么你寻找的空格后面总是跟着奇数个星号。

正则表达式

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

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

答案 2 :(得分:1)

尝试这个

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

但是如果你想在它中使用它,它将无法在javascript中使用,因为它也使用js中不支持的lookbehind

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

find this site very good用于创建正则表达式。

答案 5 :(得分:0)

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

这是Python中的示例:

string = "ABC *This is a sub string* DEF"
import re
new_string = re.sub("\*(.*?)\*", lambda x: '*' + x.group(1).replace(" ", "-") + '*', a)

那应该给你 ABC *这是一个子字符串* DEF