Re: [問題] 去除字串中間的空白

看板C_Sharp作者 (無所事事)時間17年前 (2007/01/29 13:51), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串6/7 (看更多)
※ 引述《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
不是可以直接把match到的東西抓出來?
01/29 14:11, 1F

01/29 14:40, , 2F
要找的是match之前的部分
01/29 14:40, 2F
文章代碼(AID): #15lOjSRj (C_Sharp)
討論串 (同標題文章)
文章代碼(AID): #15lOjSRj (C_Sharp)