作者weisor (无所事事)
看板C_Sharp
标题Re: [问题] 去除字串中间的空白
时间Mon Jan 29 13:51:20 2007
※ 引述《GreatShot (我要拿Ph.D.!!!)》之铭言:
: ※ 引述《weisor (无所事事)》之铭言:
: : 我想请教一个困扰我很久的问题 ^^"
: : 我知道,如果要找第一个 '{' 之前的部分,
: : regular expression 可以用 /[^{]*{/
: : 那当 '{' 改成字串,而不只是某个字元集合的时候,
: : 也就是我想找第一个 substring 之前的部分的话,
: : regular expression 该怎麽写呢?
: : 例如从 "xxxxABCyyyyyABCzzzz" 找第一个 "ABC" 之前的部分,
: : 也就是 "xxxxABC" 这一串。
: 这例子有点笼统
: 但
: 如果你的case恰巧正如你的例子这样
: xxxx yyy zzz 中不包含"A","B" and "C"
: 那就把pattern设成@"[^ABC]*[A]{1}[B]{1}[C]{1}"就可以了
: 用Regex.Match or Regex.Matches去抓即可
: 甚至你想用Regex.Split之後再把"ABC"加回去也是可以
那如果 xxxx yyy zzz 中可能含有 [ABC] 呢?
我知道 @"([^A]..|A([^B].|B[^C]))" 可以 match 不是 "ABC" 的字串,
但是要如何确认一个字串不会出现 "ABC" 这个子字串呢?
不过 @"([^A]..|A([^B].|B[^C]))" 这种写法满暴力的,
如果要找的 substring 长一点的话,会变得很恶心,
不知道有没有比较好的做法?
如果 "ABC" 换成是一个集合,例如 @"(foo|bar)",
甚至是一个 pattern 的话,是不是可以用 regular expression 做到这件事呢?
: 但如果你的case是类似DNA sequence
: ATGCGCTTGCACTGAGAG这样
: 然後你要抓出AGA之前的所有字串
: 那就是另外的写法了
: 比较笨的方法就是先把AGA(或是类似的pattern)Regex.Replace成某些符号
: eg. "###"
: 再按照前面的方法炮制就好了
了解
: 其实方法还有很多种
: 甚至用string 的 indexof() with substring() 也是作的出你要的需求
: 还更直观
不过如果可以用 regular expression 的话,code 应该会比较简洁,
虽然用 indexof() with substring() 比较快。
: 只是有时候要处理的字串可能有几十万笔
: 而且要match的pattern还不固定
: 得从资料中学习或是撷取出来
: 这时候就没有办法用一般的string方法写死在程式里
: Regex这class此时就特别好用了
因为要找的 substring 可能是一个 pattern,
而 indexof() 是 exact match,
目前想到的做法是用 regular expression 去找这个 pattern 在字串中出现的位置,
再用 substring 去切。不知道是不是有更好的做法?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.129.151.104
1F:推 megaman1206:不是可以直接把match到的东西抓出来? 01/29 14:11
2F:推 weisor:要找的是match之前的部分 01/29 14:40