作者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://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1405345155.A.94B.html
1F:推 a926:你有用到()的话即使你没有用?<name>做命名 他还是一样是Group 07/16 10:18
2F:→ a926:只是变成用0、1、2这种用index方式命名的Group 07/16 10:18
3F:→ a926:我用Expresso 测试你的.*(.{3}).{2}是可以得到567的结果 07/16 10:19
4F:→ ssccg:你都已经找到解法了不会试着改一下? 07/16 12:53
5F:→ ssccg:用你给的改一下就是 (?<=^.*).{3}(?=.{2}$) 07/16 12:53
6F:→ ssccg:或是更简单一点 .{3}(?=.{2}$) 07/16 13:03
7F:→ a926:以你的例子 如果你只用.*.{3}.{2}会抓到原字串 07/17 09:19
8F:→ a926:但是当你加上(.{3}) 除了原字串,会额外多一个Group 07/17 09:19
9F:→ a926:去抓你的456 07/17 09:20
10F:→ a926:567才对Sry. 07/17 09:20
11F:→ a926:我用C#测的结果会有2个Group 一个原字串 一个是567 07/17 09:23