我有一个数据框架,其中一列包含半结构化文本。我在寻找某些信息,但它们有一种模式,我不知道如何利用。
head(events5)
flight_history_id date_time_recorded event
862 280604281 2012-11-13 17:55:58.673-08 Arrival Estimation
5514 280316415 2012-11-12 17:25:08.814-08 Time Adjustment
5527 280315758 2012-11-12 16:10:06.968-08 Time Adjustment
5539 280316495 2012-11-12 15:38:10.099-08 Time Adjustment
5545 280303866 2012-11-13 06:51:45.831-08 Time Adjustment
5558 280303866 2012-11-12 05:50:23.547-08 Time Adjustment
data_updated
862 EGA- Based on Distance and Airspeed
5514 EGD- New=11/13/12 20:20, DGATE- New=A1, EGA- New=11/13/12 21:00
5527 EGD- New=11/13/12 19:05, DGATE- New=A7, EGA- New=11/13/12 20:50, AGATE- New=C5
5539 EGD- New=11/13/12 06:35, DGATE- New=A1, EGA- New=11/13/12 07:15
5545 AGD- Old=11/13/12 07:40 New=11/13/12 07:38, EGA- Old=11/13/12 10:25 New=11/13/12 10:18
5558 EGD- New=11/13/12 07:45, DGATE- New=11, EGA- New=11/13/12 10:25, AGATE- New=A1
这是 DPUT:
structure(list(flight_history_id = c(280604281L, 280316415L,
280315758L, 280316495L, 280303866L, 280303866L, 280271465L, 280271465L,
280271465L, 280271465L), date_time_recorded = structure(c(10L,
4L, 3L, 2L, 7L, 1L, 9L, 8L, 6L, 5L), .Label = c("2012-11-12 05:50:23.547-08",
"2012-11-12 15:38:10.099-08", "2012-11-12 16:10:06.968-08", "2012-11-12 17:25:08.814-08",
"2012-11-12 17:58:14.268-08", "2012-11-13 05:16:41.01-08", "2012-11-13 06:51:45.831-08",
"2012-11-13 07:38:19.593-08", "2012-11-13 07:54:22.588-08", "2012-11-13 17:55:58.673-08"
), class = "factor"), event = structure(c(1L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L), .Label = c("Arrival Estimation", "Time Adjustment"
), class = "factor"), data_updated = structure(c(3L, 8L, 7L,
4L, 2L, 5L, 1L, 10L, 9L, 6L), .Label = c("AGD- New=11/13/12 10:22, EGA- Old=11/13/12 11:20 New=11/13/12 11:09",
"AGD- Old=11/13/12 07:40 New=11/13/12 07:38, EGA- Old=11/13/12 10:25 New=11/13/12 10:18",
"EGA- Based on Distance and Airspeed", "EGD- New=11/13/12 06:35, DGATE- New=A1, EGA- New=11/13/12 07:15",
"EGD- New=11/13/12 07:45, DGATE- New=11, EGA- New=11/13/12 10:25, AGATE- New=A1",
"EGD- New=11/13/12 08:55, EGA- New=11/13/12 09:45, AGATE- New=A1",
"EGD- New=11/13/12 19:05, DGATE- New=A7, EGA- New=11/13/12 20:50, AGATE- New=C5",
"EGD- New=11/13/12 20:20, DGATE- New=A1, EGA- New=11/13/12 21:00",
"EGD- Old=11/13/12 08:55 New=11/13/12 10:05, EGA- Old=11/13/12 09:45 New=11/13/12 10:55",
"EGD- Old=11/13/12 10:05 New=11/13/12 10:30, EGA- Old=11/13/12 10:55 New=11/13/12 11:20"
), class = "factor")), .Names = c("flight_history_id", "date_time_recorded",
"event", "data_updated"), row.names = c(862L, 5514L, 5527L, 5539L,
5545L, 5558L, 5564L, 5566L, 5570L, 5572L), class = "data.frame")
我正在尝试从“data_updated”
列中提取以“EGA
”开头的部分的字段“New=”
部分。问题是有时两者之间有一个“Old=”字段。我查看了使用 stringr::str_split 并将列转换为列表,但仍然有同样的问题。我认为这是一个正则表达式/gsub 问题,但不确切知道如何实现。
有什么建议吗?
编辑:我希望最终产品是一个具有EGA/新值的向量/列。大概是这样的:
NA
11/13/12 21:00
11/13/12 20:50
11/13/12 07:15
11/13/12 10:18
11/13/12 10:25
这是一个端到端的解决方案:
##formats of the date-times
date.format <- "\\d{2}/\\d{2}/\\d{2} \\d{2}:\\d{2}"
##puts this together into a regex
regex.string <- paste0("EGA- (?:Old=",date.format," )?New=(",date.format,")")
##if pattern matches, get the part of "new" we are looking for
##otherwise NA
ifelse(grepl(regex.string,events5$data_updated),
gsub(paste0("^.*",regex.string,".*$"),"\\1",events5$data_updated),
NA_character_)
怎么样?
EGA-\s*(?:Old=\d{2}\/\d{2}\/\d{2}\s+\d{2}:\d{2}\s*)?New=(\d{2}\/\d{2}\/\d{2}\s+\d{2}:\d{2})
这里有一个替代方案,与@法老的正则表达式相比,它在< code > EGA -标签后有无限量的文本
/EGA-(?:(?!New=|").)+(New=[:\d\/ ]+)/g
如果否定前瞻中的“
过于笼统,您可以将其更改为EGD
。
演示说明:http://regex101.com/r/qY4uA0
如果不需要标志和分隔符,请将其删除。
问题内容: 我想从一般的HTML页面中提取所有文本(是否显示)。 我想 删除 任何HTML标记 任何JavaScript 任何CSS样式 是否有一个正则表达式(一个或多个)可以实现? 问题答案: 您不能真正用正则表达式解析HTML。太复杂了。RE根本无法正确处理部分。此外,某些常见的HTML之类的东西将在浏览器中作为适当的文本工作,但可能会使天真的RE感到困惑。 有了合适的HTML解析器,您会更快
我正在寻找一个正则表达式,它必须在不同类型的HTML标记之间提取文本。 对于前任: <代码> <代码> <代码> 我找到了这个特殊的片段
本文向大家介绍正则表达式提取img的src,包括了正则表达式提取img的src的使用技巧和注意事项,需要的朋友参考一下 要匹配的字符串:<img src=image/ad1.gif width="128" height="36"/><img src='image/ad2.gif' width="128" height="36" /> 正则表达式:<img[\s]+src[\s]*=[\s]*(([
我想从与正则表达式模式匹配的字符串中提取子字符串。 所以我在寻找这样的东西: 这就是我所拥有的: 问题是,为我提供了一个数组,其中的类型为。 < code>NSRange与< code >范围不兼容 知道如何在没有太多代码行的情况下在 swift 中实现这个简单的事情吗?
我正在努力与一个简单的正则表达式,我似乎不能得到正确的。 我有一些文字如下: 最后,我希望得到一个数组列表,其中包含括号中的用户名,即: 这是我到目前为止的代码: 然而,我得到的反馈是: 再一次,我想: 即没有括号和前斜杠 有人能解释一下我的正则表达式出了什么问题吗?
问题内容: 我需要这件事的帮助。查看以下正则表达式: 我想查找这样的词:“自制”,“ aaaa-bbb”而不是“ aaa-bbb”,而 不是 “ aaa–aa–aaa”。基本上,我想要以下内容: 单词-连字符-单词。 它适用于所有内容,但该模式会通过:“ aaa–aaa–aaa”,但不应通过。哪种正则表达式适用于此模式? 问题答案: 可以从表达式中删除反斜杠: 下面的代码应该工作 请注意,您可以使