我对regexp有疑问,我有这样的文字
embedded-software-entwickler
基本上我想用其他内容替换-
但保留该组,以便$1@$2@$3
轻松@
代替-
我目前的正则表达式就像这个([a-zäöüß]+)(-)
但是这个不会碰到第三个单词entiwckler
答案 0 :(得分:3)
如此简单的事情:
([\w]*?)-([\w]*?)-([\w]*)
替换为:
$1@$2@$3
我们在这里做的基本上是我们开始使用\w
寻找任何可用的角色,并在开头使用惰性符号*?
,并在末尾使用贪婪的符号*
来匹配每个角色组,并用-
分隔每个部分。
如果您想在每个部分中包含空格,数字,特殊字符等,您可以使用以下内容:
([\s\S]*?)-([\s\S]*?)-([\s\S]*)
如果你喜欢动态的东西,你可以试试这样的东西:
([^\-]+)-
替换为:
$1@
演示:https://regex101.com/r/p6zQTO/1/
选择每个组加上替换的替代方法:
([^\-]*)-([^\-]*)
替换为:
$1@$2
答案 1 :(得分:2)
如果您的需要只是将所有' - '更改为'@',尝试tr/-/@/m
会产生更简单和更好的替换。
如果您需要为其他目的进行分组和提取,请尝试/(\w+)(?:-(\w+))*/
之类的内容
(?:组但不提取)