简体   繁体   English

R:将多个比赛替换为比赛

[英]R: Replacing multiple matches with matches

I am trying to shorten some regex matches in strings. 我正在尝试缩短字符串中的一些正则表达式匹配项。 Here is an example 这是一个例子

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

I can match the expression that I want, and get the matches, like so 我可以匹配我想要的表达式,并得到匹配,就像这样

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

However, I am trying to shorten the strings to 但是,我正在尝试将字符串缩短为

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

How can I achieve this? 我该如何实现?

You could use gsub . 您可以使用gsub Make use of backreferences to capture the desired part: 利用反向引用捕获所需的部分:

> 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"          

You can match the following regex: 您可以匹配以下正则表达式:

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

and replace with: 并替换为:

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

for earch string in your array. 用于数组中的earch字符串。

DEMO 演示

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM