我有许多正则表达式试图在很长的(约100页文本)字符串中查找项目,每个字符串都在寻找特定的东西(即一个查找一种类型的信息,另一种查找不同的信息类型等。)
每个正则表达式组在文本中都会有大约50个匹配项,但是按顺序运行它们需要一段时间。
有没有办法可以一次在字符串上运行所有正则表达式,或者创建一个正则表达式,捕获组可以按任何顺序(任意次数)发生?
答案 0 :(得分:2)
您可以使用组和替换将所有单个正则表达式放入大型正则表达式中:
bigregex = "(?:" + regex1 + "|" + regex2 + "|" + regex3 + ")"
但是,如果每个正则表达式的匹配项永远不会重叠,并且您没有使用带反向引用的带编号的捕获组,那么这只能为您提供所需的结果。
答案 1 :(得分:0)
这可能不是你所需要的,但可能会引发一个想法。我将它用作单通,多标记,查找和替换。
public static string MultiReplace(this string target, Dictionary<string, string> replacementDictionary)
{
return Regex.Replace(target, "(" + String.Join("|", replacementDictionary.Keys.ToArray()) + ")", match => replacementDictionary[match.Value]);
}