我有一個正則表達式。它包含一個必需的命名捕獲組和一些可選的命名捕獲組。它捕獲單獨的匹配並將這些部分解析爲我需要的指定組。可重複的複雜正則表達式,帶點'。'定界分隔符
除了現在我需要它重複。
本質上,我的正則表達式表示(可能)更長的字符串中的單個原子單位。而不是完全匹配我的正則表達式,目標字符串通常包含正則表達式的重複實例,由點''分隔。字符。
例如,如果這是我的正則表達式捕獲:<some match>
實際字符串可能看起來像任何一個:
<some match>
<some match>.<some other match>
<some match>.<some other match>.<yet another match>
修改原始正則表達式以解釋重複模式而忽略點的最簡單方法是什麼?
我不確定它是否真的需要,但這裏是我用來捕捉單個細分的正則表達式。再次,我想加強這個以考慮可選的附加分段。我希望每個細分都顯示爲結果集中的另一個「匹配」;
^(?<member>[A-Za-z_][A-Za-z0-9_]*)(?:\[(?<index>[0-9]+)\])?(?:\[(?<index2>[0-9]+)\])?(?:\[(?<index3>[0-9]+)\])?$
它旨在解析一個類路徑,最多三個可選索引訪問器。 (即「member.sub_member[0].sub_sub_member[0][1][2]
」)
我懷疑答案是涉及先行還是後退,對此我並不完全熟悉。
我目前使用String.Split分隔字符串段。但是我想,如果正則表達式的增強功能足夠簡單,那麼我會跳過額外的分割步驟,並重新使用正則表達式作爲驗證機制。
編輯:
如齒輪額外的扳手,我想禁止任何點「」字符從字符串的開頭或結尾開始。它們只應作爲路徑段之間的分隔符存在。
一個簡單的方法是將字符串拆分爲'.',然後在每個字符串上運行您的正則表達式。 –
我目前這樣做。我想如果對正則表達式的增強足夠簡單,我可以放棄字符串.Split,並且還可以在解析字符串之前對其進行驗證。 – BTownTKD
換句話說,你正在尋找從字符串的開頭到尾部用點分隔的連續匹配,沒有別的,不是嗎? –