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

Regex 用于在子字符串中用破折号替换空格的正则表达式。,regex,string,replace,textmate,Regex,String,Replace,Textmate,我一直在努力寻找一种方法,用破折号替换字符串中的空格,但只替换字符串特定部分中的空格 来源: ABC *This is a sub string* DEF ABC-*This-is-a-sub-string*-DEF ABC *This-is-a-sub-string* DEF 我对正则表达式的尝试: /\s/g 如果使用正则表达式匹配空格并替换,则得到以下结果: ABC *This is a sub string* DEF ABC-*This-is-a-sub-string*-DEF

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

来源:

ABC *This is a sub string* DEF
ABC-*This-is-a-sub-string*-DEF
ABC *This-is-a-sub-string* DEF
我对正则表达式的尝试

/\s/g
如果使用正则表达式匹配空格并替换,则得到以下结果:

ABC *This is a sub string* DEF
ABC-*This-is-a-sub-string*-DEF
ABC *This-is-a-sub-string* DEF
但我只想替换文本中由两个星号包围的空格

以下是我想要实现的目标:

ABC *This is a sub string* DEF
ABC-*This-is-a-sub-string*-DEF
ABC *This-is-a-sub-string* DEF
不确定为什么在使用启用了“在TextMate中查找并替换正则表达式”选项时使用的正则表达式类型

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

任何帮助都将不胜感激。

试试这个:
\s(\*[^*]*\*])\s
。它将匹配
*这是组1中的子字符串*
。然后换成
-$1-

试试这个

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

/(?使用此regexp从星号中获取空格
(。(*(\)*)(。
取regex{4}提供的数组的第4个元素,并用破折号替换它

I用于创建正则表达式。

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

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

要识别由星号包围的空间,关键的观察是,如果星号仅成对出现,则您要查找的空间后面总是有奇数个星号

正则表达式

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

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

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

下面是Python中的一个示例:

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

这应该会给你ABC*This-is-a-sub-string*DEF.

你使用的是什么语言/程序?我确实想到了这一点,但它给出了这个错误(至少在PHP中是这样):编译失败:lookbehind断言不是固定的LengthInterrest,我没有在PHP中尝试。可能它对正则表达式有一定的限制。当然,这取决于正则表达式解释器使用的是什么。如我所说,例如JS根本不支持lookbehind。我没有/使用Textmate,所以不知道它是否以及如何支持:)如果字符串中有两个标记的子字符串,例如:
ABC*这是一个子字符串*DEF*这是另一个子字符串*
DEF周围的空格也将被转换。我试图在TextMate中使用该表达式,但它不起作用。刚刚检查了TextMate手册,它说它不支持可变长度查找。你确定吗现在有任何编辑器或语言支持这种类型的表达式吗?@没有人是的,当然会这样做。问题是,这是失败吗?:)没有人指定在这些表达式下应该发生什么circumstances@Camsoft:此正则表达式不替换星号之间的空格,而仅替换星号后面/前面未加星号的空格。它不适用于
ABC DEF*此处的子字符串*GHJ IKL
感谢您指出另一个答案不正确。我已经测试了你的,它确实有效。确实很聪明:)但如果你在文档中有奇数个星号,它就不能正常工作。但无论如何,这没有意义:)+1