2016-10-11 47 views
2

我有一個字符串,我只想刪除換行符後面緊跟一個小寫字母。例如,我的字符串可能包含:刪除r中的某些正則表達式

的文本\ r \ n另一條線\ r \ NOF文本

一行,

這將顯示爲:

一行的文字

另一行

的文字。

在這個例子中,我只是想去掉第二線斷裂,從而使文本行文:文本

文字的另一行的

一行

我知道模式是「\ r \ n [az]」,所以代碼應該是類似於

gsub("\r\n[a-z]","") 

但我不能拿出代碼來刪除換行符,同時保留小寫字母。

謝謝!

回答

2

我們可以使用正則表達式環視

txtN <- gsub("\r\n(?=[a-z])", "", txt, perl = TRUE) 
cat(txtN, sep="\n") 
# one line of text 
# another line of text, 
+1

這工作完美!非常感謝您的幫助。 – nhoff

1

您需要使用此一positive lookahead

例如:

text = "one line of text \r\n another line \r\nof text," 

fixed = gsub("\r\n(?=[a-z])", "", text, perl = T) 

cat(fixed) 
#> one line of text 
#> another line of text, 
+0

這很像我發佈的 – akrun

+0

非常感謝! – nhoff

2

你可以達到你需要的東西,而不lookarounds和使用TRE正則表達式像

s <- "one line of text \r\n another line \r\nof text," 
res <- gsub("\r?\n([a-z])","\\1", s) 
cat(res) 

IDEONE demo

如果使用(...)周圍的模式你定義了一個捕獲組你可以從replaceme中引用的內容nt模式。

圖案的詳細資料

  • \r?\n - 斷行(或者\r\n\n
  • ([a-z]) - 內第1組一個小寫字母ASCII。

代用

  • \1 - 編號反向引用到第1組的內容。

更多有關

PS:如果你是熱衷於使用PCRE正則表達式,還有比在先行另一個非常好的結構支持 - 匹配任何樣式換行符的\R。然後,我會建議:

gsub("\\R(?=[a-z])", "", txt, perl = TRUE) 
相關問題