3 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超7個(gè)贊
一個(gè)可能的解決方案可能是使用積極的外觀:
(?<=n)n
它會給你最終的位置:
* N ***?** NN
N * N ***?** N
NN * N ***?**
正如Timothy Khouri所提到的 ,積極的前瞻更為直觀
我更喜歡他的命題(?=nn)n
更簡單的形式:
(n)(?=(n))
這將引用您想要的字符串的第一個(gè)位置,并將捕獲組(2)中的第二個(gè)n。
那是因?yàn)椋?/p>
可以在前瞻中使用任何有效的正則表達(dá)式。
如果它包含捕獲括號,則將保存反向引用。
因此,組(1)和組(2)將捕獲'n'表示的任何內(nèi)容(即使它是復(fù)雜的正則表達(dá)式)。

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
使用具有捕獲組的前瞻工作,代價(jià)是使正則表達(dá)式更慢,更復(fù)雜。另一種解決方案是告訴Regex.Match()方法,下一次匹配嘗試應(yīng)該從哪里開始。試試這個(gè):
Regex regexObj = new Regex("nn");Match matchObj = regexObj.Match(subjectString);while (matchObj.Success) { matchObj = regexObj.Match(subjectString, matchObj.Index + 1); }

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊
AFAIK,沒有純正的正則表達(dá)方式一次做到這一點(diǎn)(即返回你請求的三個(gè)捕獲沒有循環(huán))。
現(xiàn)在,您可以找到一次模式,并以offset(找到位置+ 1)開始循環(huán)搜索。應(yīng)該將正則表達(dá)式與簡單代碼結(jié)合使用。
[編輯]太棒了,當(dāng)我基本上說Jan所示的時(shí)候,我被投票了...
[編輯2]要明確:Jan的答案更好。不是更精確,但肯定更詳細(xì),值得選擇。我只是不明白為什么我的被投票,因?yàn)槲胰匀粵]有看到任何錯(cuò)誤。沒什么大不了的,只是討厭。
- 3 回答
- 0 關(guān)注
- 816 瀏覽
添加回答
舉報(bào)