R gsub同时固定图案和非固定图案

时间:2018-02-02 20:37:28

标签: r regex data.table gsub

我在R data.table数据中有一个列,其中的文字如下:

> my_table
                           descr
   1:   DESCRIPTIONA - JONES:4:2
   2:  DESCRIPTIONB - WILDER:6:7
  ---                          
 253:    DESCRIPTIONA - MANN:5:8
 254: DESCRIPTIONB - ROBERTS:3:4

请注意,有两种说明:DESCRIPTIONADESCRIPTIONB。我想将整个描述部分替换为包含A的第一个分号的名称,如果DESCRIPTIONAB DESCRIPTIONB > my_table descr 1: A:4:2 2: B:6:7 --- 253: A:5:8 254: B:3:4 }。这意味着我完全不关心这个名字。输出应该如下所示:

(DESCRIPTIONA - JONES):4:2

我尝试使用gsub来完成此操作,但我无法使用正则表达式来替换<html> <head> <title> Test </title> </head> <body> <form name="test" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post"> <input type="text" name="name"> <br> <input type="submit" name="submit" value="Submit Form"> <br> </form> <?php if(isset($_POST['submit'])) { $name = $_POST['name']; echo "User Has submitted the form and entered this name : <b> $name </b>"; echo "<br>You can use the following form again to enter a new name."; } ?> </body> </html> 部分。这很困难,因为每个名字都不同,而且长度不同。有什么想法吗?

1 个答案:

答案 0 :(得分:5)

x = c(
    "DESCRIPTIONA - JONES:4:2",
    "DESCRIPTIONB - WILDER:6:7",
    "DESCRIPTIONA - MANN:5:8",
    "DESCRIPTIONB - ROBERTS:3:4"
)

gsub(pattern = "DESCRIPTION(.)[^:]*", replacement = "\\1", x)
# [1] "A:4:2" "B:6:7" "A:5:8" "B:3:4"

说明:"DESCRIPTION(.)[^:]*"匹配单词DESCRIPTION,然后匹配单个字符(.)&#34;已保存&#34;作为parens ()捕获组,它会尽可能多地匹配非冒号字符[^:]*)。它取代了与第一个(\\1)捕获组的完全匹配。

您可以在此处使用它来更好地理解:https://regex101.com/r/Sc7oC1/1