2016-06-06 53 views
5

這似乎應該很容易,但我不知道哪個排列的正則表達式匹配將導致提取整個字符串第一個數字,如果字符串。我可以像這樣第一個數字之前提取字符串:第一個數字後保留字符串

gsub("\\d.*$", "", "DitchMe5KeepMe") 

不知道如何寫這樣第一個數字後面的字符串保持在正則表達式模式?

回答

4

而是懶點匹配的,我會依靠\D非數字字符類,並使用sub,使只有一個置換:

sub("^\\D*\\d", "", "DitchMe5KeepMe") 

這裏,

  • ^ - 匹配字符串的開頭
  • \D* - 匹配零個或多個非數字
  • \d - 相匹配的位數

注意:刪除到第一,添加+最後\d後匹配一個或多個數字。

查看IDEONE demo

4

我能看到的是,你要刪除的一切,直到第一個數字,所以你可以使用這個表達式和替換它與一個空字符串:

^.*?\d 

我以前.*?使圖案ungreedy,所以,如果你有DitchMe5Keep8Me它將匹配DitchMe5,如果你使用的貪婪模式類似.*\d它將匹配DitchMe5Keep8

Regex 101 Demo

R Fiddle Demo

enter image description here

+0

我想刪除以前的所有內容,包括第一個數字,但只有第一個數字。因此,雖然這很奇妙:'gsub(「。*?\\ d」,「」,「DitchMe5KeepMe」)',this:'gsub(「。*?\\ d」,「」,「Dit5chMe5KeepMe」)不產生「chMe5KeepMe」的預期輸出,而只是「KeepMe」 – boshek

+0

@boshek,我已經更新了答案。爲了製作訣竅,我使用了錨'^' –

+0

訣竅是使用'sub'。預計只有一個替換,所以使用'gsub'沒有意義。看到我的答案。無論如何,錨點是必須的。 –

0

您還可以使用str_extractstringr

library(stringr) 
str_extract("DitchMe5KeepMe", "(?<=\\d).*$") 
[1] "KeepMe" 

將提取的第一個數字後的一切。

str_extract("DitchMe5KeepMe6keepme", "(?<=\\d).*$") 
[1] "KeepMe6keepme" 
相關問題