我有一个场景,我有一组 url(数百万)并且需要运行一组正则表达式(> 60k 正则表达式)以确定 url 是否与正则表达式匹配,然后用替换模式替换它们。
foreach(url in urls)
{
foreach(regex in regexes)
{
newurl = Regex.Replace(url, matchpattern, replacement);
store newurl;
break;
}
}
模式可能是这样的:
Regex.Replace(url, "^http([s]?):/(/www.|/)en.wikipedia.org(.*)", "http$1://en.m.wikipedia.org$3" );
我对内存和运行时间有限制。目前,我只实现了上面的伪代码,但是即使使用 6k 正则表达式(20Mb),内存消耗也太高了。我想知道是否已经有一个库可以处理这种问题,或者是否有人建议我应该构建什么样的数据结构来优化内存和运行时。
还有一些例子,左边是匹配模式,右边是替换模式。
^http([s]?):/(/www.|/)youtube.com/watch\?(. ) http$1://m.youtube.com/watch?$3 ^http([s]?): /(/www.|/)facebook.com/(pages/.|[^/ ] $) http$1://m.facebook.com/$3 ^http([s]?):/(/www.| /)twitter.com/(. ) http$1://mobile.twitter.com/$3 ^http([s]?):/(/www.|/)yellowpages.com/(. ) http$1:// m.yellowpages.com/$3 ^http([s]?):/(/www.|/)imdb.com/(title|name)/(. ) http$1://m.imdb.com/$3/ $4 ^http([s]?):/(/www.|/)facebook.com/pages/(. ) http$1://m.facebook.com/pages/$3 ^http([s]?): //detail.chiebukuro.yahoo.co.jp/qa/question_detail/q(\d+)$ http$1://m.chiebukuro.yahoo.co.jp/detail/q$2 ^http([s]?): //www.ebay.com.au/itm/([^/])/(\d+)$ http$1://m.ebay.com.au/itm/$2/$3 ^http([s]?) ://www.youtube.com/user/([^/?&]*)$ http$1://m.youtube.com/user/$2