正则表达式,C#提取字符串变量

在文章生成时,现在要创建一个动态的标签替换,用正则表达式操作方法

1.在模板文件里面有newslist_1_12 文章列表标签 要提取这个列表的参数12 是列表行数 1是所属分类编号

现在要新闻列表10行分类为52编号的列表,其替换标签是 newslist_52_10 (这样子可以明白吧)

2.分析思路

   a.把模板里面的@"newslist_/d{1,2}_/d{1,2}" 提取出来,变成字符串数组

   b.把字符串数组里面的参数提取出来

   c.提取的参数操作数据库生成HTML代码

public   void  getNewlList()
     {
        

        rxx 
=   new  System.Text.RegularExpressions.Regex( @" NewsList_(?<PID>(\d{1,2}))_(?<Num>(\d{1,2})) " ,
         RegexOptions.Compiled
| RegexOptions.IgnoreCase);
        
string  input  =  Console.ReadLine();
        
if  (input  ==   " Q " )
        {
            
return ;
        }
        Console.WriteLine(
" 字符串长度: "   +  input.Length);
        System.Text.RegularExpressions.MatchCollection m;
        m 
=  rxx.Matches(input);
        Console.WriteLine(m.Count);
        
for  ( int  i  =   0 ; i  <  m.Count; i ++ )
        {

           
// 再次提取已经正则表达式分组后的字符串
            Console.WriteLine(m[i].Result( " 分类:${PID}\t行数:${Num} " ));
        }
     
         
// 单个提取模式
        
//       print(rxx.Match(input).Result("${PID}${Num}") + "分类编号", true);

        getNewlList();
    }

附:微软MSDN解释

反向引用提供查找重复字符组的方便的方法。它们可被认为是再次匹配同一个字符串的快捷指令。

例如,若要查找重复且相邻的字符(如单词“tall”中的两个 L),可以使用正则表达式 (?<char>\w)\k<char>,该正则表达式使用元字符 \w 来查找任何单个单词的字符。分组构造 (?<char> ) 将元字符括在其中,以强制正则表达式引擎记住子表达式匹配(在此示例中将是任意单个字符),并以名称“char”保存它。反向引用构造 \k<char> 使引擎对当前字符和以名称“char”存储的先前匹配字符进行比较。只要单个字符与其前面的字符相同,整个正则表达式就可以找到一个匹配。

要找到重复的全字,您可以修改该分组子表达式,以搜索前面是空格的任何字符组,而不是只搜索任意单个字符。可以用匹配任何字符组的子表达式 \w+ 替换元字符 \w,并使用元字符 \s 匹配字符分组前的空格。这就生成了正则表达式 (?<char>\s\w+)\k<char>,该正则表达式查找任何重复的全字(例如“the the”),但也会匹配指定字符串的其他重复情况,例如词组“the theory”中的重复情况。

为验证上述第二种匹配是以单词为边界的,可以将元字符 \b 添加到重复匹配的后面。所生成的正则表达式 (?<char>\s\w+)\k<char>\b 只查找重复的、前面有空格的全字。

转载于:https://www.cnblogs.com/feishan/archive/2008/06/23/1227925.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值