我有很多文件少於64 kb,我需要將它們轉換爲下面的代碼。正則表達式工作很慢
這是QT中的工作代碼QRegExp
。
我試圖用regex_replace
在MSVC中重寫它,並且面臨着非常慢的工作問題。
QT:
temp.replace(QRegExp("[ ]{0,}(=)[ ]{0,}"), QString("="));
temp.replace(QRegExp("[ ]{0,}(==)[ ]{0,}"), QString("=="));
temp.replace(QRegExp("[ ]{0,}(>)[ ]{0,}"), QString(">"));
temp.replace(QRegExp("[ ]{0,}(<)[ ]{0,}"), QString("<"));
temp.replace(QRegExp("[ ]{0,}(\\&\\&)[ ]{0,}"), QString("&&"));
temp.replace(QRegExp("[ ]{0,}(\\|\\|)[ ]{0,}"), QString("||"));
temp.replace(QRegExp("[ ]{0,}(\\})[ ]{0,}"), QString("}"));
temp.replace(QRegExp("[ ]{0,}(\\{)[ ]{0,}"), QString("{"));
MSVC:
temp = regex_replace(temp, std::regex("[ ]{0,}(=)[ ]{0,}"), "=");
temp = regex_replace(temp, std::regex("[ ]{0,}(==)[ ]{0,}"), "==");
temp = regex_replace(temp, std::regex("[ ]{0,}(>)[ ]{0,}"), ">");
temp = regex_replace(temp, std::regex("[ ]{0,}(<)[ ]{0,}"),"<");
temp = regex_replace(temp, std::regex("[ ]{0,}(\\&\\&)[ ]{0,}"),"&&");
temp = regex_replace(temp, std::regex("[ ]{0,}(\\|\\|)[ ]{0,}"),"||");
temp = regex_replace(temp, std::regex("[ ]{0,}(\\})[ ]{0,}"), "}");
temp = regex_replace(temp, std::regex("[ ]{0,}(\\{)[ ]{0,}"),"{");
例如:std::string
溫度(18KB的大小〜),用於對每個線約10秒的處理。
這裏可能有什麼問題?
哪個是使用'Qt'代替的?我的意思是,其中一個比另一個好得多?從你寫的內容不清楚。 – skypjack
您是否嘗試過使用簡單的正則表達式來檢查正則表達式自動機是否消耗了時間,或者通過讀取某些不幸的時尚文件? – mvw
@skypjack我不能告訴QT的確切執行時間,但它非常快,我不必去想它。 –