簡體   English   中英

R忽略正則表達式字符串中的字符

[英]R Ignore character within a Regex string

我到處尋找一些regex ,這將導致R忽略正則表達式字符串中的下一個字符。

例如,給定myvector

 myvector <- c("abcdef", "ghijkl", "mnopqrs")

regex字符串:

 regexstring <- "[a-z]{3}XXXXXXXXX "

其中包含一些未知字符XXXXXXXXX,我想告訴R忽略正則表達式字符串本身中的最后一個空格。

運行以下命令后,

regexstring <- "[a-z]{3} "
sub(regexstring, " ", myvector)

給,

"abcdef"  "ghijkl"  "mnopqrs"

因為任何字符串中都沒有空格。 但希望在包含XXXXXXXXX之后,我將獲得與運行相同的輸出

regexstring <- "[a-z]{3}"
sub(regexstring, " ", myvector)

這是:

 " def"  " jkl"  " pqrs"

我無法擦除最終空間或使用trimws()等,而且我看不到任何使R忽略最終空間的方法。 是否有任何XXXXXXXXX可以這樣做? 謝謝。

通過使用(?x)自由行間距內聯修飾符代替XXX可以使最終空間成為格式空間,並傳遞perl=TRUE參數以確保使用PCRE regex引擎解析該模式。

myvector <- c("abcdef", "ghijkl", "mnopqrs")
regexstring <- "[a-z]{3}(?x) "
sub(regexstring, " ", myvector, perl=TRUE) 
## => [1] " def"  " jkl"  " pqrs"

參見R演示

請注意,在模式中間放置(?x)將會影響在模式位置之后 (右側)使用的任何文字空白,直到模式結束或直到(?-x)修飾符選項。

在Wiktor Stribizew的答案的基礎上,我能夠弄清楚如何使用Stringr做到這一點:

require(stringr)
myvector    <- c("abcdef", "ghijkl", "mnopqrs")
regexstring <- regex("[a-z]{3}# ", comments = T)
myvector %>% str_replace(regexstring, " ")

[1] " def"  " jkl"  " pqrs"

這樣,我就能修改正則表達式字符串本身(regexstring),而不是替換命令(sub或str_replace)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM