一次匹配同一个字符串上的许多正则表达式

时间:2014-01-09 21:58:59

标签: c# regex

我有许多正则表达式试图在很长的(约100页文本)字符串中查找项目,每个字符串都在寻找特定的东西(即一个查找一种类型的信息,另一种查找不同的信息类型等。)

每个正则表达式组在文本中都会有大约50个匹配项,但是按顺序运行它们需要一段时间。

有没有办法可以一次在字符串上运行所有正则表达式,或者创建一个正则表达式,捕获组可以按任何顺序(任意次数)发生?

2 个答案:

答案 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]);
    }