以下是我正在使用的示例字符串:
- - - some text followed by more - - followed by more - -
我需要在行的开头找到-
的每次出现,并替换为另一个字符。因此,如果要将-
替换为~
,则最终结果将为
~ ~ ~ some text followed by more - - followed by more - -
我尝试了(-).?
,选择了所有-
。如果我用^
表示行的开头,我只得到第一个' - '。如果我将模式设为^((-)\s){3}
,选择该组,但该组在开头可以是任意数量的-
,那么为- - some text is valid
和
- some text is valid
和
- - - - some text is valid
答案 0 :(得分:4)
有几种方法:从上一场比赛的开始或结束(-
)匹配除[^\w-]*
(\G
)以外的任何0 +非单词字符并捕获它们(使用(...)
),然后匹配-
并使用替换字符($1
)替换为第一个捕获组(~
)的反向引用:
var res = Regex.Replace(s, @"\G([^\w-]*)-", "$1~");
请参阅regex demo。
或者,在字符串开头(\W+
)匹配所有1个或多个非字符字符{^
),并将-
替换为~
:
var res = Regex.Replace(s, @"^\W+", m => m.Value.Replace("-","~"));
请参阅C# demo:
var s = "- - - some text followed by more - - followed by more - - ";
var res = Regex.Replace(s, @"^\W+", m => m.Value.Replace("-", "~"));
Console.WriteLine(res);
// => ~ ~ ~ some text followed by more - - followed by more - -
或者,您可以利用可变宽度lookbehind:
(?<=^\W*)-
替换为~
。见this regex demo。 (?<=^\W*)
lookbehind仅在-
匹配时才会出现customer#application.war
匹配,前提是字符串开头的前缀为0 +非字符。