我卡上的正則表達式:正則表達式和平衡組
我有一個數字的輸入字符串和一個字母,可以在字符串中和括號之間含有較多的數字和字母:
只是一個舉幾個例子
26U(35O40) will be read as 26 and (35 or 40)
22X(34U(42O27)) will be read as 22 xor (34 and (42 or 27))
21O(24U27) will be read as 21 or (24 and 27)
20X10X15 Will be read as 20 xor 10 xor 15
我已閱讀,這可以使用均衡組中獲得,但是我已經試過很多的正則表達式和關閉的是:
(?<ConditionId>\d+)(?<Operator>X|U|O)?(?<Open>\()(?<ConditionId>\d+)+(?<Operator>X|U|O)?(?<ConditionId>\d+)(?<-Open>\))
我也想過,也許我讓它更難,我應該只是運行幾次相同的正則表達式,第一次爲括號外的所有內容,第二次爲內部的東西,並再次運行時匹配內。類似的東西:
(?<ConditionId>\d+)?(?<Operator>U|O|X)?(?<Inner>(?:\().*(?:\)))
建議或幫助?
在此先感謝。
編輯1:我不必驗證輸入,只是解析它。
編輯2:因此,背後的原因是通過條件Id識別條件,然後將運算符應用於輸入字符串中的其他條件。按照與輸入字符串中出現的順序相同的順序,更易於理解的示例是邏輯門:
對於給定的輸入20x10x15,我將不得不通過conditionId來確定條件,並檢查條件是有效的,並應用XOR運算他們,是這樣的:
true X true X false = false;
false X false X true = true;
true X (false U true) = true
,這是我不羣一切都變成「ConditionId」組和「操作員」組的原因。
編輯3 這也是一個有效的例子
(23X10)U(30O(20X19)
爲什麼你解決正則表達式來解決這個特定問題?您應該能夠使用常規字符串操作和堆棧來編寫解析器。 – willaien
嗨,感謝您的建議,我使用了正則表達式,因爲條件實際上比我用於該示例的條件稍微複雜一些,並且我認爲正確的方法是使用正則表達式,因爲有時最難的是最簡單的,而且我不想結束與String操作的鬥爭(有時也會更困難)。 無論如何,你是對的,我一定會看看,如果我沒有得到解決與正則表達式的問題,因爲這是我的第二選擇。 – Nekeniehl
你需要實際*替換*嗎?不只是*提取*部分字符串? ''22X(34U(42O27))「'=>'」22 xor(34 and(42 or 27))「' –