C#正则表达式求助,在线等,急!

.Net技术 码拜 7年前 (2015-05-10) 726次浏览 0个评论

现在有这么一个需求,我在编辑文档的时候,需要将文档内所有的<img>标签替换需要的内容。
例如:

<p>
<img src="http://localhost:9186/upload/image/20150416/6356482317004106408355884.jpg" title="356019.jpg" alt="356019.jpg"/>
<img src="http://localhost:9186/upload/image/20150416/6356482317004106408355884.jpg" title="356019.jpg" alt="356019.jpg"/>
</p>
<p>
<img src="empty.png" data-original="http://localhost:9186/upload/image/20150416/6356482317004106408355884.jpg" title="356019.jpg" alt="356019.jpg"/>
<img src="empty.png" data-original="http://localhost:9186/upload/image/20150416/6356482317004106408355884.jpg" title="356019.jpg" alt="356019.jpg"/>
</p>

前提是要保证src和data-original都只能在一个标签中出现一次!
因为每次替换掉src之后,访问编辑页面之后,又会生成一个src,如果直接替换的话,就会存在多个data-original。
在此先感谢热心的朋友

常用正则表达式收集 asp.net 验证正则表达式

整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$
只能输入数字:”^[0-9]*$”。
只能输入n位的数字:”^\d{n}$”。
只能输入至少n位的数字:”^\d{n,}$”。
只能输入m~n位的数字:。”^\d{m,n}$”
只能输入零和非零开头的数字:”^(0|[1-9][0-9]*)$”。
只能输入有两位小数的正实数:”^[0-9]+(.[0-9]{2})?$”。
只能输入有1~3位小数的正实数:”^[0-9]+(.[0-9]{1,3})?$”。
只能输入非零的正整数:”^\+?[1-9][0-9]*$”。
只能输入非零的负整数:”^\-[1-9][]0-9″*$。
只能输入长度为3的字符:”^.{3}$”。
只能输入由26个英文字母组成的字符串:”^[A-Za-z]+$”。
只能输入由26个大写英文字母组成的字符串:”^[A-Z]+$”。
只能输入由26个小写英文字母组成的字符串:”^[a-z]+$”。
只能输入由数字和26个英文字母组成的字符串:”^[A-Za-z0-9]+$”。
只能输入由数字、26个英文字母或者下划线组成的字符串:”^\w+$”。
验证用户密码:”^[a-zA-Z]\w{5,17}$”正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。
验证是否含有^%&””””,;=?$”等字符:”[^%&””””,;=?$\x22]+”。
只能输入汉字:”^[\u4e00-\u9fa5]{0,}$”
验证Email地址:”^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$”。
验证InternetURL:”^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$”。
验证电话号码:”^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$”正确格式为:”XXX-XXXXXXX”、”XXXX- XXXXXXXX”、”XXX-XXXXXXX”、”XXX-XXXXXXXX”、”XXXXXXX”和”XXXXXXXX”。
验证身份证号(15位或18位数字):”^\d{15}|\d{18}$”。
验证一年的12个月:”^(0?[1-9]|1[0-2])$”正确格式为:”01″~”09″和”1″~”12″。
验证一个月的31天:”^((0?[1-9])|((1|2)[0-9])|30|31)$”正确格式为;”01″~”09″和”1″~”31″。整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$
只能输入数字:”^[0-9]*$”。
只能输入n位的数字:”^\d{n}$”。
只能输入至少n位的数字:”^\d{n,}$”。
只能输入m~n位的数字:。”^\d{m,n}$”
只能输入零和非零开头的数字:”^(0|[1-9][0-9]*)$”。
只能输入有两位小数的正实数:”^[0-9]+(.[0-9]{2})?$”。
只能输入有1~3位小数的正实数:”^[0-9]+(.[0-9]{1,3})?$”。
只能输入非零的正整数:”^\+?[1-9][0-9]*$”。
只能输入非零的负整数:”^\-[1-9][]0-9″*$。
只能输入长度为3的字符:”^.{3}$”。
只能输入由26个英文字母组成的字符串:”^[A-Za-z]+$”。
只能输入由26个大写英文字母组成的字符串:”^[A-Z]+$”。
只能输入由26个小写英文字母组成的字符串:”^[a-z]+$”。
只能输入由数字和26个英文字母组成的字符串:”^[A-Za-z0-9]+$”。
只能输入由数字、26个英文字母或者下划线组成的字符串:”^\w+$”。
验证用户密码:”^[a-zA-Z]\w{5,17}$”正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。
验证是否含有^%&””””,;=?$”等字符:”[^%&””””,;=?$\x22]+”。
只能输入汉字:”^[\u4e00-\u9fa5]{0,}$”
验证Email地址:”^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$”。
验证InternetURL:”^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$”。
验证电话号码:”^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$”正确格式为:”XXX-XXXXXXX”、”XXXX- XXXXXXXX”、”XXX-XXXXXXX”、”XXX-XXXXXXXX”、”XXXXXXX”和”XXXXXXXX”。
验证身份证号(15位或18位数字):”^\d{15}|\d{18}$”。
验证一年的12个月:”^(0?[1-9]|1[0-2])$”正确格式为:”01″~”09″和”1″~”12″。
验证一个月的31天:”^((0?[1-9])|((1|2)[0-9])|30|31)$”正确格式为;”01″~”09″和”1″~”31″。

请楼上的这位朋友,认真对待每件事

你直接伸手要得了。不过总得在碗里放两个钱才行。

引用 3 楼 wyd1520 的回复:

你直接伸手要得了。不过总得在碗里放两个钱才行。

不是我要啊,我写不出来啊,都搞了个通宵了,不能耽误太多时间啊

引用 4 楼 myStephen 的回复:
Quote: 引用 3 楼 wyd1520 的回复:

你直接伸手要得了。不过总得在碗里放两个钱才行。

不是我要啊,我写不出来啊,都搞了个通宵了,不能耽误太多时间啊

那你替换时把src=”empty.png” 这个也给加上呀,会就不会出现了呀。还有你这个只有在 提交后再处理,

引用 5 楼 wyd1520 的回复:
Quote: 引用 4 楼 myStephen 的回复:
Quote: 引用 3 楼 wyd1520 的回复:

你直接伸手要得了。不过总得在碗里放两个钱才行。

不是我要啊,我写不出来啊,都搞了个通宵了,不能耽误太多时间啊

那你替换时把src=”empty.png” 这个也给加上呀,会就不会出现了呀。还有你这个只有在 提交后再处理,

嗯,其实我需要的是这个正则,过程是想到的。

string html = @"<p>
                                <script src=""http://www.localhost.com/js.js""></script>
                                <img src=""http://localhost:9186/upload/image/111111111111.jpg"" data-original="""" title=""356019.jpg"" alt=""356019.jpg""/>
                                <img title=""356019.jpg"" alt=""356019.jpg"" src=""http://localhost:9186/upload/image/222222222222.jpg"" />
                                <img src=""http://localhost:9186/upload/image/333333333333.jpg"" data-original=""http://localhost:9186/upload/image/333333333333.jpg"" title=""356019.jpg"" alt=""356019.jpg"" testProperty=""test_info""/>
                                <img data-original=""http://localhost:9186/upload/image/44444444444.jpg"" title=""356019.jpg"" alt=""356019.jpg"" testProperty=""test_info""/>
                                </p>";

                Console.WriteLine(html);
                Console.WriteLine("替换后");

                Console.WriteLine(Regex.Replace(html, @"<img(?<imgStart>\b[^<>]*?\b)(?<imgSrc>src[\s\t\r\n]*=[\s\t\r\n]*)(?<imgUrl>[""""]?[\s\t\r\n]*[^\s\t\r\n""""<>]*)(?<imgOriginal>data-original[\s\t\r\n]*=[\s\t\r\n]*?[""""]?[\s\t\r\n]*[^\s\t\r\n""""<>]*)?(?<imgEnd>[^<>]*?/?[\s\t\r\n]*)>", @"<img $1$2""empty.jpg"" data-original=$3$4>"));

                Console.ReadKey();

网上以为朋友给的灵感,自己弄出来了,可能有些复杂,还请各位给出一个简单点的表达式,

50分
你不是已经弄出来了么……
看你在Ask里面
static void RegexReplaceSrc2()
        {
            string html = @"<p>
                                <script src=""http://www.localhost.com/js.js""></script>
                                <img src=""http://localhost:9186/upload/image/111111111111.jpg"" data-original="""" title=""356019.jpg"" alt=""356019.jpg""/>
                                <img title=""356019.jpg"" alt=""356019.jpg"" src=""http://localhost:9186/upload/image/222222222222.jpg"" />
                                <img src=""http://localhost:9186/upload/image/333333333333.jpg"" data-original=""http://localhost:9186/upload/image/333333333333.jpg"" title=""356019.jpg"" alt=""356019.jpg"" testProperty=""test_info""/>
                                <img data-original=""http://localhost:9186/upload/image/44444444444.jpg"" title=""356019.jpg"" alt=""356019.jpg"" testProperty=""test_info""/>
                                </p>";
            var tmp = Regex.Replace(html, @"<img\s+[^>]*\bsrc=""[^""]*""[^>]*/>", x =>
             {
                 string v = x.Value;
                 if (!Regex.IsMatch(x.Value, @"\bdata-original\b"))
                 {
                     v = Regex.Replace(x.Value, @"src=(""[^""]*"")", @"src=""empty.png"" data-original=$1");
                 }
                 return v;
             });
            Console.WriteLine(tmp);
        }
引用 9 楼 starfd 的回复:
static void RegexReplaceSrc2()
        {
            string html = @"<p>
                                <script src=""http://www.localhost.com/js.js""></script>
                                <img src=""http://localhost:9186/upload/image/111111111111.jpg"" data-original="""" title=""356019.jpg"" alt=""356019.jpg""/>
                                <img title=""356019.jpg"" alt=""356019.jpg"" src=""http://localhost:9186/upload/image/222222222222.jpg"" />
                                <img src=""http://localhost:9186/upload/image/333333333333.jpg"" data-original=""http://localhost:9186/upload/image/333333333333.jpg"" title=""356019.jpg"" alt=""356019.jpg"" testProperty=""test_info""/>
                                <img data-original=""http://localhost:9186/upload/image/44444444444.jpg"" title=""356019.jpg"" alt=""356019.jpg"" testProperty=""test_info""/>
                                </p>";
            var tmp = Regex.Replace(html, @"<img\s+[^>]*\bsrc=""[^""]*""[^>]*/>", x =>
             {
                 string v = x.Value;
                 if (!Regex.IsMatch(x.Value, @"\bdata-original\b"))
                 {
                     v = Regex.Replace(x.Value, @"src=(""[^""]*"")", @"src=""empty.png"" data-original=$1");
                 }
                 return v;
             });
            Console.WriteLine(tmp);
        }

嗯,很感谢你,你给的灵感,不过这句有不完整的地方。还请给个简单点的表达式,正则我很菜

上面那个哪里有问题不完整
这不是我之前回的那个了,这是新的,包含了第一次的那个
引用 11 楼 starfd 的回复:

上面那个哪里有问题不完整
这不是我之前回的那个了,这是新的,包含了第一次的那个

嗯嗯,很感谢你了。非常感谢。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C#正则表达式求助,在线等,急!
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!