Re: [問題] 去除字串中間的空白
※ 引述《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
推
01/29 14:11, , 1F
01/29 14:11, 1F
推
01/29 14:40, , 2F
01/29 14:40, 2F
討論串 (同標題文章)