字符串是任意的,现想把这个字符串作为一个string变量的ID存入数据库中
同时存入一个以正则替换后的字符串命名的xml文件,以便于RSS
以便查询的时候,可直接通过网址http://domain.com/query/正则后字符串 来查询结果
嗯,比如说可以替换掉不允许作为文件名的符号如空格,制表符,特殊符号,注意,用-来替换(半角的中划线),当有多个中划线时,只出现一个中划线,如何处理?
环境:asp.net C# 4.0,用于MVC架构中。求助。
补充:或者说,只保留字母,数字和汉字,其他字符均替换成“中划线”,如何实现呢??多个中划线的时候只保留一个中划线。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System;
//这个空间必须引用
using System.Text.RegularExpressions;
namespace 控制台
{
class Program
{
static void Main(string[] args)
{
Test.Main2();
}
}
public class Test
{
public static void Main2 ()
{
//定义你的正则
Regex rx = new Regex(@"{custom:prolist[^}]*?}.*?{/custom:prolist}");
// 你要进行操作的文本
string text = "{custom:prolistxxx}<li><a href='[field:arcurl/]' target=_blank>[field:title/]</a> </li>{/custom:prolist}我不是匹配内容";
//匹配
MatchCollection matches = rx.Matches(text);
// 查看匹配出来的个数
Console.WriteLine("{0} matches found.", matches.Count);
//输出 配备的内容 以及替换
foreach (Match match in matches)
{
string word = match.Groups[0].Value;
//word=word.Replace("{custom:prolistxxx}","_______________");
//word=word.Replace("{/custom:prolist}", "--------------");
text = text.Replace(word, "--------------");
int index = match.Index;
Console.WriteLine(text+"\n"+"替换{0}处",matches.Count);
//Console.WriteLine("{0} repeated at position {1}", word, index);
}
Console.ReadLine();
}
}
}
主要是 System.Text.RegularExpressions;命名空间的MatchCollection 和Regex 类的使用
string test = " \"'\\/ <>asdf哈哈asdf<>|asdf*asdf?わたし!@#$^<>?・¥4564asdfj;23|}{|}한국어%*)#@_-{|}·#¥%&*)(*{·}[]:“";
//替换空白和不允许作为文件名的字符为-
Console.WriteLine("Regex.Replace(test, "[\\s/\\\\\\\":*?<>|]+", "-"));
//仅保留字母、数字、中文
Console.WriteLine("Regex.Replace(test, "\\W+", "-"));
//输出:
//-'-asdf哈哈asdf-asdf-asdf-わたし!@#$^<>?・¥4564asdfj;23-}{-}한국어%-)#@_-{-}·#¥%&-)(-{·}[]:“
//-asdf哈哈asdf-asdf-asdf-わたし-4564asdfj-23-한국어-_-
不可作文件名的字符有9个字符:'\\', '/', ':', '*', '?', '"', '<', '>', '|',空白、单引号等符号都是可以作为文件名的,两个正则随便用哪个都可以,第一个可以按照需求灵活的改变,第二个简单全面。