正则表达式在 C# 中按组替换
Posted
技术标签:
【中文标题】正则表达式在 C# 中按组替换【英文标题】:Regex replace by group in C# 【发布时间】:2019-05-23 17:03:45 【问题描述】:我正在尝试在 C# 中使用正则表达式替换,尽管我在让模式正确对齐时遇到了一些问题。我要做的是根据前两组替换某些组合,但如果它与第三组的模式匹配则不替换。到目前为止我所拥有的是
var pattern = @"(,)|(\[\)|(^:\[[*]])";
string NewLineValue = Regex.Replace(LineValue, pattern,Environment.NewLine);
基本上我想替换字符串中的所有逗号或[
组合,但如果逗号出现在[[]]
字符内(例如[[1234,5678]]
),则不替换
非常感谢任何帮助...
【问题讨论】:
将字符“^”放在方括号内时用于创建一个否定字符类。您在第三组中使用它的方式仅意味着它是文本的开头。 听起来你想解析一个 JSON 文件..... 一个简短的输入示例和所需的输出可能会有所帮助。此外,如果您不想像@CamiloTerevinto 猜测的那样解析 JSON 文件(如果是的话,您可能会更容易),请尝试使用负前瞻。见:regular-expressions.info/lookaround.html @CamiloTerevinto 这是最终目标,但是目前我正试图将一些条目转换为可读格式,以供最终用户确定需要哪些元素......行项目在文件中也不遵循一致的格式,因为它们是活动日志条目并且逐行更改。 @shwartz,谢谢。如果“^”符号出现在 [[x]] 部分中,您能否详细说明需要放置“^”符号以忽略“,”的位置?非常感谢您的建议。 【参考方案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
),否则,匹配 (,
或 [
) 将替换为 Environment.NewLine
。
【讨论】:
以上是关于正则表达式在 C# 中按组替换的主要内容,如果未能解决你的问题,请参考以下文章