作者don750421 (1+1≠2)
看板C_Sharp
標題Re: [問題] 正規表示式Regex 觀念詢問
時間Mon Jul 14 21:39:11 2014
最近剛好有遇到正規表示法的需求,研究了一下用法及其表示的意思。
但真的就如同網路上所搜尋到的教學一樣,非常困難。
有個問題是我想透過正規表示法擷取字串。(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
推 a926:你有用到()的話即使你沒有用?<name>做命名 他還是一樣是Group 07/16 10:18
→ a926:只是變成用0、1、2這種用index方式命名的Group 07/16 10:18
→ a926:我用Expresso 測試你的.*(.{3}).{2}是可以得到567的結果 07/16 10:19
→ ssccg:你都已經找到解法了不會試著改一下? 07/16 12:53
→ ssccg:用你給的改一下就是 (?<=^.*).{3}(?=.{2}$) 07/16 12:53
→ ssccg:或是更簡單一點 .{3}(?=.{2}$) 07/16 13:03
→ a926:以你的例子 如果你只用.*.{3}.{2}會抓到原字串 07/17 09:19
→ a926:但是當你加上(.{3}) 除了原字串,會額外多一個Group 07/17 09:19
→ a926:去抓你的456 07/17 09:20
→ a926:567才對Sry. 07/17 09:20
→ a926:我用C#測的結果會有2個Group 一個原字串 一個是567 07/17 09:23