我在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
请注意,有两种说明:DESCRIPTIONA
和DESCRIPTIONB
。我想将整个描述部分替换为包含A
的第一个分号的名称,如果DESCRIPTIONA
和B
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>
部分。这很困难,因为每个名字都不同,而且长度不同。有什么想法吗?
答案 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