gpt4 book ai didi

c# - 正则表达式查找字符串中的重复模式

转载 作者:行者123 更新时间:2023-11-30 15:17:10 28 4
gpt4 key购买 nike

这是我正在使用的示例字符串:
- - - 一些文本后跟更多 - - 接着是更多 - -
我需要在行首找到每次出现的 - 并替换为另一个字符。所以,如果一个-要被替换成~,最后的结果就是
~ ~ 一些文本后跟更多 - - 后跟更多 - -

我试过(-).?,它选择了所有的-。如果我放一个 ^ 来指示行的开头,我只会得到第一个 '-'。如果我将模式指定为 ^((-)\s){3},它会选择组,但组可以是开头任意数量的 - , 所以
- - 一些文本是有效的 并且
- 一些文本是有效的 并且
- - - - 一些文本有效

最佳答案

有几种方法:匹配除-以外的任意0+个非单词字符( [^\w-]* ) 从上一场比赛 ( \G ) 的开始或结束开始并捕获它们 (用 (...) ), 然后匹配 -并用替换字符 ( $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 - -

或者,您可以利用可变宽度后视:

(?<=^\W*)-

替换为~ .参见 this regex demo . (?<=^\W*)向后看只会使 -如果从字符串开头开始有 0+ 个非单词字符,则匹配。

关于c# - 正则表达式查找字符串中的重复模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47168221/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com