吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 606|回复: 4
收起左侧

[已解决] 关于正则表达式的问题

 关闭 [复制链接]
gksj 发表于 2024-1-25 14:47
本帖最后由 gksj 于 2024-1-26 01:21 编辑

[C#] 纯文本查看 复制代码
            //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字符串为空,正常应该是第   "第三个字符串"   

如何解决最后提取的特征字符串是空的问题?
诚邀各位高手答疑,谢谢!

问题已解决!
[C#] 纯文本查看 复制代码
string rgxInput = "- %b = %c$";                                   //用户自定义简化正则表达式

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

罗曼罗兰 发表于 2024-1-25 16:03
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 上操作,只有最后一次才生效
d199212 发表于 2024-1-25 16:05
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();
}
 楼主| gksj 发表于 2024-1-25 16:30
罗曼罗兰 发表于 2024-1-25 16:03
string strInput = "第一个字符串 - 第二个字符串 = 第三个字符串"; //待处理字符串(条件返回)

string r ...

这不是重点,重点是最后一个匹配返回的字符串是空的
 楼主| gksj 发表于 2024-1-26 01:45
附上完整测试代码

[C#] 纯文本查看 复制代码
 
//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
            }
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 15:21

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表