Re: [問題] 正規表示式Regex 觀念詢問

看板C_Sharp (C#)作者 (1+1≠2)時間11年前 (2014/07/14 21:39), 編輯推噓1(1010)
留言11則, 2人參與, 最新討論串1/1
最近剛好有遇到正規表示法的需求,研究了一下用法及其表示的意思。 但真的就如同網路上所搜尋到的教學一樣,非常困難。 有個問題是我想透過正規表示法擷取字串。(Substring的做法也行,但想試試別種) 假設有個string input = "01234567890123456789"; 我需要擷取,字串第二個開始從後面數來三碼(也就是567) 我研究出來使用正規表示法 .*(?<aaa>.{3}).{2} http://ppt.cc/KIeK 這種方式擷取出來,會以Group的方式呈現, 所以只要去抓 aaa 這個group 即可。 如圖:http://ppt.cc/09PP 問題一: 但是,我不想要使用Group ,想要直接Match String出來就是我要的結果。 這樣有辦法嗎?我直接改成 .*(.{3}).{2} 就抓不到我要的"567"了 以下這個例子就沒有使用到Group,直接Match String就有結果了。 http://ppt.cc/AkwF 網頁測試 Regex: http://ppt.cc/B1pV 問題二: P.S :以上兩種方式都可以取出要的東西,有使用Group和沒有使用Group有啥差別呢?? ※ 引述《don750421 (1+1≠2)》之銘言: : Regex 中 有一個屬性是 RightToLeft。 : 想請問一下,假設我的字串為 : string a = : "The 2D matrix representing an image.Rotate the image by 90 degrees"; : 如果我要擷取由右邊第8的字元擷取至,由右邊數來第11個字元。 : 也就是,我要取得 "90" 這個字串。 : 想請問可以透過Regex做到嗎?? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.239.133.52 ※ 文章網址: http://www.ptt.cc/bbs/C_Sharp/M.1405345155.A.94B.html

07/16 10:18, , 1F
你有用到()的話即使你沒有用?<name>做命名 他還是一樣是Group
07/16 10:18, 1F

07/16 10:18, , 2F
只是變成用0、1、2這種用index方式命名的Group
07/16 10:18, 2F

07/16 10:19, , 3F
我用Expresso 測試你的.*(.{3}).{2}是可以得到567的結果
07/16 10:19, 3F

07/16 12:53, , 4F
你都已經找到解法了不會試著改一下?
07/16 12:53, 4F

07/16 12:53, , 5F
用你給的改一下就是 (?<=^.*).{3}(?=.{2}$)
07/16 12:53, 5F

07/16 13:03, , 6F
或是更簡單一點 .{3}(?=.{2}$)
07/16 13:03, 6F

07/17 09:19, , 7F
以你的例子 如果你只用.*.{3}.{2}會抓到原字串
07/17 09:19, 7F

07/17 09:19, , 8F
但是當你加上(.{3}) 除了原字串,會額外多一個Group
07/17 09:19, 8F

07/17 09:20, , 9F
去抓你的456
07/17 09:20, 9F

07/17 09:20, , 10F
567才對Sry.
07/17 09:20, 10F

07/17 09:23, , 11F
我用C#測的結果會有2個Group 一個原字串 一個是567
07/17 09:23, 11F
文章代碼(AID): #1Jmzs3bB (C_Sharp)
文章代碼(AID): #1Jmzs3bB (C_Sharp)