我有幾百個字符串列表和10K的正則表達式的數組。斯威夫特3:最高效的方法來檢查許多字符串與許多正則表達式
我現在要遍歷所有字符串,並檢查其10K正則表達式匹配。什麼是最高效的方式來做到這一點?
目前我在做這個:
myRegularExpression.firstMatch(in: myString, options: myMatchingOption, range: NSMakeRange(0, myString.characters.count)) == nil
其中myRegularExpression
是存放重用一個NSRegularExpression
和myMatchingOption
是NSRegularExpression.MatchingOptions(rawValue: 0)
有沒有檢查一個字符串相匹配的一個更快,更高性能的方式那10K正則表達式?
編輯:
我需要知道的不僅是如果我10k的正則表達式配合也是其中之一。所以,目前我在for循環中有一個for循環:外部循環遍歷我的幾百個字符串,對於每個字符串,我循環遍歷我的10k規則,看看是否有一條規則適合(當然,如果適合我可以停止對於字符串,所以大致爲:
for string in stringsToCheck {
for rule in myRules {
if string.matches(rule) {
// continue with next string of stringsToCheck
}
}
}
你可以排除字符串和/或regices的組(即,你有數據中的已知模式?)。 regexrunner可能針對給定的正則表達式和字符串進行了大量優化,但它無法知道您的數據,例如如果您有多個使用^或$的註冊表,您可以將第一個或最後一個字母的所有字符串分組,並排除一組不匹配的字符串。另外,預編譯可能的regices? –
您是否嘗試通過將所有正則表達式合併爲一個單一表達式來構建一個大型表達式,其中| ?不確定解析器是否能夠存活10,000個模式,但即使將它們同時組合10個或20個,也可以獲得一些性能改進。 –
@LoveTätting感謝您的回覆,請參閱我的編輯... – swalkner