首页 新闻 搜索 专区 学院

如何正则替换特殊字符串?

0
悬赏园豆:50 [待解决问题]

字符串是任意的,现想把这个字符串作为一个string变量的ID存入数据库中

同时存入一个以正则替换后的字符串命名的xml文件,以便于RSS

以便查询的时候,可直接通过网址http://domain.com/query/正则后字符串 来查询结果

嗯,比如说可以替换掉不允许作为文件名的符号如空格,制表符,特殊符号,注意,用-来替换(半角的中划线),当有多个中划线时,只出现一个中划线,如何处理?

环境:asp.net C# 4.0,用于MVC架构中。求助。 

补充:或者说,只保留字母,数字和汉字,其他字符均替换成“中划线”,如何实现呢??多个中划线的时候只保留一个中划线。

Yo.Chen的主页 Yo.Chen | 菜鸟二级 | 园豆:225
提问于:2011-06-13 09:21
< >
分享
所有回答(2)
0
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 类的使用

隋凯 | 园豆:65 (初学一级) | 2011-06-13 16:45
:)其实主要就是这个正则规则。

我的要求应该说得很明白,你是用Foreach来进行匹配查找和替换,这样有失本意。

就是将带有特殊字符串中的特殊字串用中划线替换掉,当连续出现多个中划线时,只用一个中划线来替换。

最最关键的就是这个正则规则。也即你写的替换你的正则这一点。
支持(0) 反对(0) Yo.Chen | 园豆:225 (菜鸟二级) | 2011-06-13 16:59
你的字符串 是网址还是文件名?
支持(0) 反对(0) 隋凯 | 园豆:65 (初学一级) | 2011-06-13 17:08
@"(\\.)|[\W,\s]{1,}" 你去试试这个吧
支持(0) 反对(0) 隋凯 | 园豆:65 (初学一级) | 2011-06-13 18:31
@"((\\.)|[\W,\s]){1,}"
支持(0) 反对(0) 隋凯 | 园豆:65 (初学一级) | 2011-06-13 18:33
0
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个字符:'\\', '/', ':', '*', '?', '"', '<', '>', '|',空白、单引号等符号都是可以作为文件名的,两个正则随便用哪个都可以,第一个可以按照需求灵活的改变,第二个简单全面。

Lionheart Zhang | 园豆:334 (菜鸟二级) | 2011-10-15 00:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册