尽管我在使模式正确对齐方面遇到一些问题,但我仍尝试在C#中使用正则表达式替换。我想做的是根据前两个组替换某些组合,但是如果它与第三组的模式匹配,则不进行替换。到目前为止,我是
var pattern = @"(,)|(\[\{)|(^:\[[*]])";
string NewLineValue = Regex.Replace(LineValue, pattern,Environment.NewLine);
基本上,我想替换字符串中的所有逗号或[{
组合,但是如果逗号出现在[[]]
个字符(例如[[1234,5678]]
)之内,则不要替换
非常感谢您的帮助...
答案 0 :(得分:1)
您需要匹配并捕获[[
和]]
之间的所有子字符串(要在结果字符串中恢复),然后在所有其他上下文中匹配,
或[{
替换为换行符:
var pattern = @"(?s)(\[\[.*?]])|,|\[{";
var result = Regex.Replace(s, pattern, m =>
m.Groups[1].Success ? m.Groups[1].Value : Environment.NewLine);
模式匹配:
(?s)
-一个RegexOptions.Singleline
内联选项(\[\[.*?]])
-组1:[[
,尽可能少的0个字符,然后是]]
|
-或,
-逗号|
-或\[{
-[{
子字符串。如果第1组匹配(m.Groups[1].Success
),则将匹配项粘贴回(m.Groups[1].Value
),否则,匹配项(,
或[{
)被替换为{ {1}}。