c# - 如何在其他括号字符串中匹配带有嵌套括号的字符串?
问题描述
我有一个日志文件,我试图从中提取特定部分:
[2020][159]Debugging: [FIXED_RANDOM_324 - Some Text[R] Here[TM]][PRODUCTION1] - [192.0.0.1] - [Mozilla]
[2021][532]Debugging: [FIXED_ABCDEF_21 - Simple][PRODUCTION2] - [192.0.0.32] - [Chrome]
我需要得到FIXED_RANDOM_324 - Some Text[R] Here[TM]
和FIXED_ABCDEF_21 - Simple
该"FIXED_"
部分将始终相同。
我尝试使用一些简单的东西,\[FIXED.*]\]
但这只适用于顶线。
解决方案
您可以尝试@"FIXED.*?(?=\]\[)"
模式:
FIXED - fixed part
.*? - zero or more arbitrary characters (as few as posible)
][ - followed by ][ (but not included into the match)
演示:
string[] tests = new string[] {
"[2020][159]Debugging: [FIXED_RANDOM_324 - Some Text[R] Here[TM]][PRODUCTION1] - [192.0.0.1] - [Mozilla]",
"[2021][532]Debugging: [FIXED_ABCDEF_21 - Simple][PRODUCTION2] - [192.0.0.32] - [Chrome]",
};
Regex regex = new Regex(@"FIXED.*?(?=\]\[)");
var result = tests
.Select(test => regex.Match(test))
.Where(match => match.Success)
.Select(match => match.Value);
Console.Write(string.Join(Environment.NewLine, result));
结果:
FIXED_RANDOM_324 - Some Text[R] Here[TM]
FIXED_ABCDEF_21 - Simple
编辑:如果我们想计算左括号和右括号,我们必须使用更详细的模式,例如
@"FIXED(?:.*?(?<o>\[)?.*?(?<-o>\])?.*?)*(?=\])"
这里是平衡组以匹配左括号(?<o>\[)
和相应的右括号:(?<-o>\])
string[] tests = new string[] {
"[2020][159]Debugging: [FIXED_RANDOM_324 - Some Text[R] Here[TM]][PRODUCTION1] - [192.0.0.1] - [Mozilla]",
"[2021][532]Debugging: [FIXED_ABCDEF_21 - Simple][PRODUCTION2] - [192.0.0.32] - [Chrome]",
"[2021][532]Debugging: [FIXED_XYZ_02 - [Some][Text]][PRODUCTION2] - [192.0.0.32] - [Chrome]",
"[2021][532]Debugging: [FIXED_XYZ_02 - [Some][Text] more][PRODUCTION2] - [192.0.0.32] - [Chrome]",
};
Regex regex = new Regex(@"FIXED(?:.*?(?<o>\[)?.*?(?<-o>\])?.*?)*(?=\])");
var result = tests
.Select(test => regex.Match(test))
.Where(match => match.Success)
.Select(match => match.Value);
Console.Write(string.Join(Environment.NewLine, result));
结果:
FIXED_RANDOM_324 - Some Text[R] Here[TM]
FIXED_ABCDEF_21 - Simple
FIXED_XYZ_02 - [Some][Text]
FIXED_XYZ_02 - [Some][Text] more
推荐阅读
- javascript - 从 firestore 获取最后 10 个文件
- c++ - 需要 Ivalue 作为一元 '&' 操作数
- html - Linkedin html 分享标签忽略 url 并分享随机内容
- javascript - React configureStore2.default.firestore 不是一个函数
- c++ - 成员的默认初始化取决于类的其他成员的类型
- mongodb - OPLOG 在两个共享的相同 mongodb 项目中完全同步,当它不是 pub/sub 或集合声明时
- ios - 需要在构造函数中初始化@State var,但是@FetchRequest 还没有返回
- c++ - 嵌套后代的编译时计算
- regex - Find substring and delete parent substring using sed
- javascript - 函数选项中的 PHP 变量