C# 利用正则表达式获取字符串列表

正则表达式为:^mm_[0-9]{8}_[0-9]+_[0-9]+$(mm_8位数字_数字_数字)一段代码中有多个这样格式的字符串,我想将其全部获取出来,并且去除重复。请... 正则表达式为:^mm_[0-9]{8}_[0-9]+_[0-9]+$
(mm_8位数字_数字_数字)

一段代码中有多个这样格式的字符串,我想将其全部获取出来,并且去除重复。请C#问代码如何写?
现有的代码,无法获取出来:
public static string[] GetTaoBaoIdList(string sHtmlText)
{
// 定义正则表达式用来匹配 img 标签
Regex regPid = new Regex(@"^mm_[0-9]{8}_[0-9]+_[0-9]+$", RegexOptions.IgnoreCase);

// 搜索匹配的字符串
MatchCollection matches = regPid.Matches(sHtmlText);

int i = 0;
string[] sUrlList = new string[matches.Count];

// 取得匹配项列表
foreach (Match match in matches)
sUrlList[i++] = match.Groups["imgUrl"].Value;

return sUrlList;
}

假设sHtmlText= "7HZ5x%2BOzd%2BTkbVDzhlz4d2dP208%3D&p=mm_15649227_0_0E7HZ5x%2BOzd%2BTkbVDzhlz4d2dP208%3D&p=mm_15649227_0_0";

最后返回结果应该是mm_15649227_0_0
展开
 我来答
按挥霹雳鼓震锣1094
推荐于2017-12-16 · TA获得超过187个赞
知道答主
回答量:20
采纳率:0%
帮助的人:27.7万
展开全部
正则表达式的话,建议你不要那样写吧,
MatchCollection matches=Regex.Matches(sHtmlText,@"^mm_[0-9]{8}_[0-9]+_[0-9]+$");
这样就可以了,如果用using 得到matches实例更好,可以在调用完后马上放掉内存
除重复的话,看代码:
List<string> strs = new List<string>();
foreach (Match s in matches)
{
if (!strs.Contains(s.Value))
{
strs.Add(s.Value);
}
}
string[] sUrlList = strs.ToArray(); /////这个可以不要,可以直接用列表就可以了

当然了也可以用别的方法,上面是比较简单的,用冒泡比较法也可以,不过代码会很多,你可以自己搞一下别的方法
追问
还是不行,假设sHtmlText= "7HZ5x%2BOzd%2BTkbVDzhlz4d2dP208%3D&p=mm_15649227_0_0E7HZ5x%2BOzd%2BTkbVDzhlz4d2dP208%3D&p=mm_15649227_0_0";

最后返回结果应该是mm_15649227_0_0,你帮我调试一下看。谢谢!
追答
问题应该出在你那个正则表达式的^mm_[0-9]{8}_[0-9]+_[0-9]+$ 
^是以mm_开头,同在你的sHtmlText 是以7H开头 所以不行,把^去掉,$也要去掉,
我想 你对正则表达式还不够熟吧,回去在好好学习学习!!!

^mm_[0-9]{8}_[0-9]+_[0-9]+$ 最好这么写就可以了=@"mm_[0-9]{8}_[0-9]{1}_[0-9]{1} "
$这个也不要了,sHtlmltext不是以这个为结尾,
不知道吧1234
2012-03-06 · 超过19用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:38万
展开全部
static bool IsSame(string s)
{
return Regex.IsMatch(s, @"^\d{5}(\-\d{4})?$");
}
这段你能看懂不,不懂再问,别忘了using。
追问
你还是在我现有的代码上面改进一下吧。见问题补充。
同时添加一个去除重复的功能,我需要将符合条件的字符串都筛选出来。
追答
你有几点错,(1)正则表达式,(2)match.Groups["imgUrl"].Value;
改后:
public static string[] GetTaoBaoIdList(string sHtmlText)
{
// 定义正则表达式用来匹配 img 标签//^mm_[0-9]{8}_[0-9]+_[0-9]$
Regex regPid = new Regex(@"mm_[0-9]{8}_[0-9]{1}_[0-9]{1}", RegexOptions.IgnoreCase);

// 搜索匹配的字符串
MatchCollection matches = regPid.Matches(sHtmlText);
int i = 0;
string[] sUrlList = new string[matches.Count];

// 取得匹配项列表
foreach (Match match in matches)
sUrlList[i++] = match.ToString();
return sUrlList;
}
去除重复,我想你在写网络爬虫之类的吧?,你不想写算法,就用HashTable好了,淘宝不要乱弄啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式