使用正则表达式提取字符串中的数字

时间:2018-08-03 10:18:54

标签: r regex

我有一个像这样的data.frame: SO <- data.frame(coiffure_IDF$SIREN, coiffure_IDF$L6_NORMALISEE )

  coiffure_IDF.SIREN    coiffure_IDF.L6_NORMALISEE

1 54805015            75008 PARIS

2 300086907           94210 ST MAUR DES FOSSES

3 300090453           94220 CHARENTON LE PONT

4 300209608           75007 PARIS

5 300570553           95880 ENGHIEN LES BAINS

6 301123626           75019 PARIS

7 301362349           92300 LEVALLOIS PERRET

我想要这个:

  coiffure_IDF.SIREN    codpos_norm     ville

1 54805015            75008             PARIS

2 300086907           94210           ST MAUR DES FOSSES

3 300090453           94220           CHARENTON LE PONT

4 300209608           75007            PARIS

5 300570553           95880            ENGHIEN LES BAINS

6 301123626           75019             PARIS

7 301362349           92300             LEVALLOIS PERRET

所以我用了regex: SO2<- SO %>% extract(col="coiffure_IDF.L6_NORMALISEE", into=c("codpos_norm", "ville"), regex="(\\d+)\\s+(\\S+)")

所以我的右列是“ codpos_norm”,但是在第2行的“ ville”中,我只有“ ST”而不是“ ST MAUR DES FOSSES”。在第3行中只是“ CHARENTON”,依此类推 因此我尝试在正则表达式中添加一些\\s+\\S+,但是R告诉我它们属于多个组,并且必须只有2个组。

我该怎么办?

1 个答案:

答案 0 :(得分:2)

您需要匹配组2中其余的字符串,\S构造仅匹配非空格字符。使用.+来匹配任何1个以上的字符,直到字符串结尾:

extract(col="coiffure_IDF.L6_NORMALISEE", into=c("codpos_norm", "ville"), regex="(\\d+)\\s+(.+)")

您可以使用.*来匹配空字符串(如果1个空格后没有文本)。