保留regexp中的所有组

时间:2017-09-27 10:45:42

标签: regex

我对regexp有疑问,我有这样的文字

embedded-software-entwickler

基本上我想用其他内容替换-但保留该组,以便$1@$2@$3轻松@代替-

我目前的正则表达式就像这个([a-zäöüß]+)(-)但是这个不会碰到第三个单词entiwckler

2 个答案:

答案 0 :(得分:3)

如此简单的事情:

([\w]*?)-([\w]*?)-([\w]*)

替换为:

$1@$2@$3

我们在这里做的基本上是我们开始使用\w寻找任何可用的角色,并在开头使用惰性符号*?,并在末尾使用贪婪的符号*来匹配每个角色组,并用-分隔每个部分。 enter image description here

如果您想在每个部分中包含空格,数字,特殊字符等,您可以使用以下内容:

([\s\S]*?)-([\s\S]*?)-([\s\S]*)

如果你喜欢动态的东西,你可以试试这样的东西:

([^\-]+)-

替换为:

$1@

演示:https://regex101.com/r/p6zQTO/1/

选择每个组加上替换的替代方法:

([^\-]*)-([^\-]*)

替换为:

$1@$2

演示:https://regex101.com/r/p6zQTO/2/

答案 1 :(得分:2)

如果您的需要只是将所有' - '更改为'@',尝试tr/-/@/m会产生更简单和更好的替换。

如果您需要为其他目的进行分组和提取,请尝试/(\w+)(?:-(\w+))*/之类的内容 (?:组但不提取)