【发布时间】:2016-08-12 17:31:19
【问题描述】:
我构建了一个从网页中自动废弃的数据框,其中一个变量是文本形式“5 月 12 日”中的日期。
尽管如此,有时观察结果会在日期之后附加一些字符(在某些情况下是奇怪的字符),例如:“May 20 õ”、“Dez 1”、“Oct 12ABCdáé”。 对于这些情况,我想用正确的字符替换该值,例如:“Dec 24”、“Oct 1”。
在多次谷歌搜索解决方案并尝试以下功能后:sub、gsub 和 grep,我找不到找到正确功能的方法。
我看到正则表达式的学习曲线很陡峭,但在使用工具http://regexr.com/ 之后,我可以定义正则表达式以匹配出现问题的观察中的模式。 ([A-Z]{1}[a-z]{2})\s\d+.*
此时,我有以下示例:
vector = c("May 20", "Dez 1", "Oct 12ABCdáé”)
我尝试的最后一个解决方案是:
dateformat = gsub(pattern = "([A-Z]{1}[a-z]{2})\\s\\d+.*", replacement = "([A-Z]{1}[a-z]{2})\\s\\d+", x = vector)
当然,这给了我一个替换为每个文本字符串“([A-Z]{1}[a-z]{2})\s\d+”。
> dateformat
[1] "([A-Z]{1}[a-z]{2})sd+" "([A-Z]{1}[a-z]{2})sd+"
[3] "([A-Z]{1}[a-z]{2})sd+"
我真的不明白我必须在替换参数中包含什么才能删除坏字符(如果它们存在)。
【问题讨论】:
-
regexr 还具有替换功能。 replacement = ... 也可以这样测试。
-
正则表达式用于搜索文本。正则表达式不打算在替换模式中使用。您可以使用
regexpr来获取匹配的字符串。 -
如果你的最终目标是约会,
as.Date(c("May 20", "Dec 1", "Oct 12ABCdáé"), "%B %d")会不会很简单?注意:我不知道是拼写错误还是特殊字符。另外,如果您不通过年份, as.date 会考虑当前年份
标签: regex r split truncation