簡體   English   中英

R:將多個比賽替換為比賽

[英]R: Replacing multiple matches with matches

我正在嘗試縮短字符串中的一些正則表達式匹配項。 這是一個例子

vYears = c('Democrat 2000-2004',
                 'Democrat 2004-2008',
                 'Democrat 2008-2012',
                 'Republican 2000-2004',
                 'Republican 2004-2008',
                 'Republican 2008-2012',
                 'Tossup')

我可以匹配我想要的表達式,並得到匹配,就像這樣

grepYears = gregexpr('20[0-9]{2}', vYears)
regmatches(vYears, grepYears)

但是,我正在嘗試將字符串縮短為

vYearsShort = c('Democrat 00-04',
           'Democrat 04-08',
           'Democrat 08-12',
           'Republican 00-04',
           'Republican 04-08',
           'Republican 08-12',
           'Tossup')

我該如何實現?

您可以使用gsub 利用反向引用捕獲所需的部分:

> vYears = c('Democrat 2000-2004',
+                  'Democrat 2004-2008',
+                  'Democrat 2008-2012',
+                  'Republican 2000-2004',
+                  'Republican 2004-2008',
+                  'Republican 2008-2012',
+                  'Tossup')
> vYearsShort = gsub("20([0-9]{2})", "\\1", vYears)
> vYearsShort
[1] "Democrat 00-04"   "Democrat 04-08"   "Democrat 08-12"   "Republican 00-04"
[5] "Republican 04-08" "Republican 08-12" "Tossup"          

您可以匹配以下正則表達式:

^(\\w+\\s)20(\\d{2}-)20(\\d{2})$

並替換為:

\\1\\2\\3$1$2$3\\\\1\\\\2\\\\3

用於數組中的earch字符串。

演示

暫無
暫無

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

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