关于正则表达式的问题
本帖最后由 gksj 于 2024-1-26 01:21 编辑//string strInput = "第一个字符串 - 第二个字符串 = 第三个字符串 - 第四个字符串";
//string strInput = "第一个字符串 - 第二个字符串 - 第三个字符串";
//string strInput = "第一个字符串 = 第二个字符串 = 第三个字符串";
string strInput = "第一个字符串 - 第二个字符串 = 第三个字符串";//待处理字符串(条件返回)
string rgxInput = "- %b = %c"; //用户自定义简化正则表达式
string rg = rgxInput;
rg = rg.Replace(@"%a", @"(?<text1>[\s\S]*?)");
rg = rg.Replace(@"%b", @"(?<text2>[\s\S]*?)");
rg = rg.Replace(@"%c", @"(?<text3>[\s\S]*?)");
rg = rg.Replace(@"%d", @"(?<text4>[\s\S]*?)");
Regex regex = new Regex(rg, RegexOptions.IgnoreCase);
Match match = regex.Match(strInput);
if (match.Success)
{
textBox2.Text = match.Groups["text2"].Value.Trim();//返回 %b
textBox3.Text = match.Groups["text3"].Value.Trim();//返回 %c (返回数据为空???)
}
返回结果textBox3.Text字符串为空,正常应该是第 "第三个字符串"
如何解决最后提取的特征字符串是空的问题?
诚邀各位高手答疑,谢谢!
问题已解决!
string rgxInput = "- %b = %c$"; //用户自定义简化正则表达式
string strInput = "第一个字符串 - 第二个字符串 = 第三个字符串"; //待处理字符串(条件返回)
string rgxInput = "- %b = %c"; //用户自定义简化正则表达式
string resultRegex = rgxInput;
resultRegex = resultRegex.Replace(@"%b", @"(?<text2>[\s\S]*?)");
resultRegex = resultRegex.Replace(@"%c", @"(?<text3>[\s\S]*?)");
Regex regex = new Regex(resultRegex, RegexOptions.IgnoreCase);
Match match = regex.Match(strInput);
if (match.Success)
{
textBox2.Text = match.Groups["text2"].Value.Trim(); //返回 %b
textBox3.Text = match.Groups["text3"].Value.Trim(); //返回 %c
}
你写的有问题,出在对 resultRegex 的赋值上。连续使用了四次 Replace,但每次都是在原始的 rgxInput 上操作,只有最后一次才生效 string strInput = "第一个字符串 - 第二个字符串 = 第三个字符串";
string rgxInput = "- %b = %c";
string resultRegex = rgxInput.Replace(@"%a", @"(?<text1>[\s\S]*?)");
resultRegex = resultRegex.Replace(@"%b", @"(?<text2>[\s\S]*?)");
resultRegex = resultRegex.Replace(@"%c", @"(?<text3>[\s\S]*?)");
resultRegex = resultRegex.Replace(@"%d", @"(?<text4>[\s\S]*?)");
Regex regex = new Regex(resultRegex, RegexOptions.IgnoreCase);
Match match = regex.Match(strInput);
if (match.Success)
{
textBox2.Text = match.Groups["text2"].Value.Trim();
textBox3.Text = match.Groups["text3"].Value.Trim();
} 罗曼罗兰 发表于 2024-1-25 16:03
string strInput = "第一个字符串 - 第二个字符串 = 第三个字符串"; //待处理字符串(条件返回)
string r ...
这不是重点,重点是最后一个匹配返回的字符串是空的 附上完整测试代码
//string strText = "第一个字符串 - 第二个字符串 - 第三个字符串 - 第四个字符串";
//string strText = "第一个字符串 - 第二个字符串 - 第三个字符串";//自定义 待处理字符串
//strRegex = @"-(?<text2>[\s\S]*?)-(?<text3>[\s\S]*?)";//正则表达式
//string strInput = "第一个字符串 - 第二个字符串 = 第三个字符串 - 第四个字符串";
//string strInput = "第一个字符串 - 第二个字符串 - 第三个字符串";
//string strInput = "第一个字符串 = 第二个字符串 = 第三个字符串";
string strInput = "第一个字符串 - 第二个字符串 = 第三个字符串";//待处理字符串(条件返回)
string rgxInput = "- %b% = %c%"; //用户自定义简化正则表达式
if (rgxInput.EndsWith(@"%"))
{
rgxInput += "$"; //如果取值参数在末尾则添加 $ 符号
}
string rg = rgxInput;
rg = rg.Replace(@"%a%", @"(?<text1>[\s\S]*?)");
rg = rg.Replace(@"%b%", @"(?<text2>[\s\S]*?)");
rg = rg.Replace(@"%c%", @"(?<text3>[\s\S]*?)");
rg = rg.Replace(@"%d%", @"(?<text4>[\s\S]*?)");
Regex regex = new Regex(rg, RegexOptions.IgnoreCase);
Match match = regex.Match(strInput);
if (match.Success)
{
textBox2.Text = match.Groups["text2"].Value.Trim();//返回 %b
textBox3.Text = match.Groups["text3"].Value.Trim();//返回 %c
}
页:
[1]