作者Peruheru (还在想)
看板RegExp
标题[问题] 字串中必要但非目标的内容
时间Thu Sep 4 12:02:43 2014
/*
听说注明使用的语言、环境
*
问题有可能较容易被解决...
*/
VS2010使用C#
各位好
我有如下的字串
...(前略)...
606 $2lc$aFrench fiction$xTranslations into Vietnamese.
700 1$aRoy$bClaude
702 1$a? Thi? Minh Ngue?t(trans)
801 0$atw$bKML$c20140020$gAACR2$m4
805 $aA1$bMUL$pB$zMUL(VN)$d746.434041$eL735$r478$cKML4881117
...(後略)...
?字元其实是越南文字显示不出来
然後我想做一件事
找到700开头的行,取出介於$a和$b中间的字(但不确定每次都会有$b,只有$a一定有)
经过程式转换成代码以後,存入805开头,$e所带着的那一串字
但$e的位置不固定,也可能根本没有$e要自己补
不过那都是之後的事
目前是直接使用.net字串的startwith和indexof等方法分很多步捞
有想改用正规表示
试了一下
目前用 /700.{0,}\$a.{0,}\$/
可以抓出 700 1$aRoy$ 的内容
但其实我只需要 Roy 这个字而已,其他都不需要,只是搜寻的必要条件
正规表示可以做到某些东西纯粹是条件,某些东西才是真正要抓出来的结果吗?
谢谢各位
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.134.18.8
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/RegExp/M.1409803366.A.D3A.html
※ 编辑: Peruheru (220.134.18.8), 09/04/2014 12:07:14
1F:→ LPH66: 用 () 括起你要的部份, 然後程式应该会有几个 API 可以抓出 09/04 12:57
2F:→ LPH66: 这种被括起来的地方 (它会写像 sub-expression 之类的) 09/04 12:58
3F:→ LPH66: 至於这个 () 根据状况有可能需要用 \( \) 你要查一下说明 09/04 12:58
感谢你的情报
/700.{0,}\$a(.{0,})\$/
现在用这个可以在从文章内的字串中单独提出Roy
但现在有个问题
有时候700那一串会只有$a没有$b
可能就像
700 1$aRoy
试着如果写成 /700.{0,}\$a(.{0,})\$?/ 的话
在没有$b时的确抓得出来Roy
可是这样的写法反而在抓有$b的情况时
会抓成 Roy$bClaude 这样的内容
好像是因为可有可无的情况会抓尽量长的资料?
这...该怎麽办orz
自己找到解法了,在内的 4-9
将语法改成 /700.{0,}\$a([^\$]*)\$?/
就可以避免结果中含有我要切割的符号存在
感谢回答
※ 编辑: Peruheru (220.134.18.8), 09/04/2014 15:47:41