正则表达式,C#提取字符串变量
在文章生成时,现在要创建一个动态的标签替换,用正则表达式操作方法
1.在模板文件里面有newslist_1_12 文章列表标签 要提取这个列表的参数12 是列表行数 1是所属分类编号
现在要新闻列表10行分类为52编号的列表,其替换标签是 newslist_52_10 (这样子可以明白吧)
2.分析思路
a.把模板里面的@"newslist_/d{1,2}_/d{1,2}" 提取出来,变成字符串数组
b.把字符串数组里面的参数提取出来
c.提取的参数操作数据库生成HTML代码
{
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
只查找重复的、前面有空格的全字。