R:“gsub”如何处理空格?

时间:2012-02-14 09:40:27

标签: regex r

我有一个字符串"ab b cde",即"ab[space]b[space]cde"。我想用空格替换“space-b”和“space-c”,以便输出字符串为"ab[space][space][space][space]de"。我无法弄清楚如何在不删除第一个“b”的情况下摆脱第二个“b”。我试过了:

gsub("[\\sb,\\sc]", " ", "ab b cde", perl=T)

但这给了我"a[spaces]de"。有什么指针吗?感谢。

编辑:考虑一个更复杂的问题:我想通过删除"akui i ii""akui[space]i[space]ii"将字符串"akui[spaces|""space-i"转换为"space-ii"。< / p>

4 个答案:

答案 0 :(得分:6)

[\sb,\sc]表示“空格中的一个字符b,,空格,c”。 您可能想要(\sb|\sc)之类的内容,这意味着“空格后跟b,空格后跟c” 或\s[bc]表示“空格后跟bc”。

s <- "ab b cde"
gsub( "(\\sb|\\sc)",     "  ", s, perl=TRUE )
gsub( "\\s[bc]",         "  ", s, perl=TRUE )
gsub( "[[:space:]][bc]", "  ", s, perl=TRUE )  # No backslashes

要删除多个字母实例(如第二个示例所示),请在要删除的字母后添加+

s2 <- "akui i ii"
gsub("\\si+", " ", s2)

答案 1 :(得分:5)

有一个简单的解决方案。

    gsub("\\s[bc]", " ", "ab b cde", perl=T)

这会给你你想要的。

答案 2 :(得分:2)

您可以像这样使用lookbehind matching

gsub("(?<=\\s)i+", " ", "akui i ii", perl=T)

编辑: lookbehind仍然是要走的路,用你原来的帖子中的另一个例子来证明。希望这会有所帮助。

答案 3 :(得分:0)

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = { Application.class })
@Slf4j
 public class RequestEntityValidatorsTests {

请注意第二个参数中的 double 空格。