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 展开
(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 展开
2个回答
展开全部
正则表达式的话,建议你不要那样写吧,
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(); /////这个可以不要,可以直接用列表就可以了
当然了也可以用别的方法,上面是比较简单的,用冒泡比较法也可以,不过代码会很多,你可以自己搞一下别的方法
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不是以这个为结尾,
展开全部
static bool IsSame(string s)
{
return Regex.IsMatch(s, @"^\d{5}(\-\d{4})?$");
}
这段你能看懂不,不懂再问,别忘了using。
{
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好了,淘宝不要乱弄啊。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询