簡體   English   中英

在R中使用正則表達式替換數字前面的字符

[英]Replace a character preceding a number using regex in R

我有許多列名可以用以下模式表示。

dat <- c("Male97","Male98","Male99", "Male100andover","Female0","Female1" ,"Female2", "Female3", "Female4" ,"Female5", "Female100andover")

我正在嘗試使用正則表達式在字母和數字字符之間添加前面的定界字符,例如破折號。

我想要的輸出是例如Male-97Female-0 但是,我不希望在'100以上'的情況下在數字字符后插入定界字符。

我已經嘗試了以下正則表達式:

gsub('([e])[0-9]', '-', dat)

它幾乎可以正常工作。 我需要的東西不能用破折號代替'e'。

有人可以幫我嗎?

您的([e])[0-9]正則表達式與捕獲e匹配,后跟一個數字,即使該數字不在字符串的末尾。 然后,僅在替換中使用- ,從而數字丟失。 您可以嘗試使用另一個([0-9])捕獲組,但是它將改變Male100andover的值,諸如此類。

您可以像這樣使用捕獲組驅動的正則表達式:

dat <- c("Male97","Male98","Male99", "Male100andover","Female0","Female1" ,"Female2", "Female3", "Female4" ,"Female5", "Female100andover")
gsub("(\\d+)$", "-\\1", dat)

請參閱IDEONE演示

說明:

  • (\\\\d+) -匹配並將第一個或多個數字捕獲到組1中...
  • $ -字符串的末尾。

在替換模式中, \\1向后引用捕獲的數字。

結果:

 [1] "Male-97"          "Male-98"          "Male-99"          "Male100andover"  
 [5] "Female-0"         "Female-1"         "Female-2"         "Female-3"        
 [9] "Female-4"         "Female-5"         "Female100andover"

邊緣案例處理

gsub("(\\d+\\D*)$", "-\\1", dat) ## insert before the last digit sequence
## [1] "Male-97"             "Male-98over"         "Male99over-100under"
gsub("^(\\D*)(\\d+)", "\\1-\\2", dat) ## insert before the first digit sequence
## [1] "Male-97"             "Male-98over"         "Male-99over100under"

觀看另一個演示

暫無
暫無

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

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