我正在尝试使用正则表达式解析文件的内容,但我想出的模式似乎不起作用。
我尝试使用的正则表达式是
string regex = @"^(?<key>\w+?)\s*?:\s*?{(?<value>[\s\S]+?)}$";
我试图解析的文本是
string text = @"key:{value}
key:{valu{0}e}
key:{valu
{0}e}
key:{val-u{0}e}
key:{val__[!]
-u{0}{1}e}";
但是,它返回 0 个结果
MatchCollection matches = Regex.Matches(text, regex, RegexOptions.Multiline);
我已经尝试在 RegExr 上测试这个正则表达式,按预期工作。
我不确定为什么这在 C# 中尝试时不起作用。
MCVE:
string regex = @"^(?<key>\w+?)\s*?:\s*?{(?<value>[\s\S]+?)}$";
string text = @"key:{value}
key:{valu{0}e}
key:{valu
{0}e}
key:{val-u{0}e}
key:{val__[!]
-u{0}{1}e}";
MatchCollection matches = Regex.Matches(text, regex, RegexOptions.Multiline);
Console.WriteLine(matches.Count);
最佳答案
我们可能想尝试的一种方法是测试我们的表达式是否适用于另一种语言。
此外,我们可能想简化表达式:
^(.*?)([\s:]+)?{([\s\S].*)?.$
我们有三个捕获组。第一个和第三个是我们想要的键和值。
正则表达式
您可以在regex101.com 中修改/简化/更改您的表达式.
正则表达式电路
您还可以在 jex.im 中可视化您的表情:
JavaScript 演示
const regex = /^(.*?)([\s:]+)?{([\s\S].*)?.$/gm;
const str = `key:{value}
key:{valu{0}e}
key:{valu
{0}e}
key: {val-u{0}e}
key: {val__[!]
-u{0}{1}e}`;
const subst = `$1,$3`;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log('Substitution result: ', result);
C# 测试
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"^(.*?)([\s:]+)?{([\s\S].*)?.$";
string substitution = @"$1,$3";
string input = @"key:{value}
key:{valu{0}e}
key:{valu
{0}e}
key: {val-u{0}e}
key: {val__[!]
-u{0}{1}e}";
RegexOptions options = RegexOptions.Multiline;
Regex regex = new Regex(pattern, options);
string result = regex.Replace(input, substitution);
}
}
原始正则表达式测试
const regex = /^(?<key>\w+?)\s*?:\s*?{(?<value>[\s\S]+?)}$/gm;
const str = `key:{value}
key:{valu{0}e}
key:{valu
{0}e}
key: {val-u{0}e}
key: {val__[!]
-u{0}{1}e}`;
const subst = `$1,$2`;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log('Substitution result: ', result);
引用资料:
关于c# - C# 中的 RegEx 捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56197730/