r - 在 R 中,如何使用正则表达式来查找字符串的模式?
问题描述
我正在尝试用单个空格替换数据集每一行中的模式。
模式为: MM/DD/YYYY ##:##:## 人名 (PNAME)
每一行都是一个字符串,如:
[1] 之前的文字... 04/17/2014 08:46:42 John Doe (JDOE) ...之后的文字
期望的结果:
[1] 之前的文字... ...之后的文字
我尝试了以下(以及许多变体):
pattern <- "[[0-9]][[0-9]][[:punct:]][[0-9]][[0-9]][[:punct:]][[0-9]][[0-9]][[0-9]][[0-9]][[:space:]][[0-9]][[0-9]][[:punct:]][[0-9]][[0-9]][[:punct:]][[0-9]][[0-9]][[:space:]][[:alpha::]][[:space:]][[:alpha::]][[:punct:]][[:alpha::]][[:punct:]]) "
replacement <- " "
sub(pattern, replacement, data$Description)
看来我没有正确设置模式。我在这里阅读了一些数字或正则表达式问题,但没有一个使用试图替换多个字符/单词的模式。你会怎么写这个?
解决方案
这里有几个问题:
[[0-9]]
匹配[
or 一个数字,然后是 a]
,你只需要\d
or[0-9]
来匹配一个数字- 匹配一个你需要
[[:alpha:]]
而不是的字母[[:alpha::]]
- 您不需要手动键入多个
[0-9]
or[[:alpha:]]
,您可以使用+
或限制(范围)量词(如{1,2}
)。
您可以使用
gsub("\\s+\\d{1,2}/\\d{1,2}/\\d{4}\\s+\\d{1,2}:\\d{1,2}:\\d{1,2}\\s+\\w+\\s+\\w+\\s+\\([^()]*\\)", "", data$Description)
查看正则表达式演示
细节
\s+
- 一个或多个空格\d{1,2}/\d{1,2}/\d{4}
- 类似日期的字符串(一位或两位数字,/
,一位或两位数字,/
,四位数字)\s+
- 一个或多个空格\d{1,2}:\d{1,2}:\d{1,2}
- 类似时间的字符串\s+\w+\s+\w+\s+
- 用一个或多个空格括起来的两个空格分隔的单词(也可以写成(?:\s+\w+){2}\s+
)\(
- 一个(
字符[^()]*
(
- 除了and之外的零个或多个字符)
\)
- 一个)
字符。
推荐阅读
- python - 例外:写入 .h5 文件时找不到正确的原子类型?
- php - 在注册表单中上传codeigniter照片
- typescript - 基于泛型的类字段类型
- javascript - Return response after all operations complete nodejs
- python - 带有线程模块的 Python 3.x 分段错误
- google-sheets - 检测新文本块以在 Google 表格中生成函数
- ios - Flutter 是否支持播放 iPhone 的 AES128 加密 HLS 播放列表
- javascript - Javascript将数组推送到具有唯一键的数组
- python - 使用海龟图形在 Python 中使用 OOP 创建海龟
- swift - 使用 HealthKit 卡在完成处理程序/调度组