我有一段大段文字,例如:
mytext <- "Date joined: some long text here 01/02/2012. Some more long text here, then commencement date: 1/5/2012. More info at the end."
我想提取任何包含“加入日期”或“开始日期”的句子中的所有日期
所以我的结果将是1/5/2012和01/02/2012。
我用正则表达式尝试了几种模式,但到目前为止还没有成功。
答案 0 :(得分:1)
这是您提供的原始文本:
public class Set implements Iterable<Integer> {
private LinkedList<Integer> elements;
public Set() {
this.elements = new LinkedList<Integer>();
}
@Override
public Iterator<Integer> iterator() {
return elements.iterator();
}
}
首先在句点处分割文本,然后返回句子的向量。
mytext <- "Date joined: some long text here 01/02/2012. Some more long text here, then commencement date: 1/5/2012. More info at the end."
然后,我们仅选择带有您注意到的短语的那些句子。
sentences <- strsplit(mytext,".",fixed=TRUE)[[1]]
现在我们可以搜索日期:
relevant <- sentences[grepl("Date joined|commencement date",sentences)]
这将产生向量:
unlist(regmatches(relevant,gregexpr("[0-9]{1,2}/[0-9]{1,2}/[0-9]{2,4}",relevant)))
取决于日期格式的变化范围,您可能必须调整此正则表达式模式。另外,我精确地使用了您提供的短语(大写)来选择句子。如果这些短语不区分大小写,那么在选择包含这些短语的句子时,您将希望使用[1] "01/02/2012" "1/5/2012"
选项。
更新:原始海报询问如何提取每个相关句子中的第一个日期。我修改了代码以提供这种情况的相关示例并使用sapply。
ignore.case=TRUE
在mytext <- "Date joined: some long text here 01/02/2012 and also here 05/13/1899. Some more long text here, then commencement date: 1/5/2012 and also 2/3/4567. More info at the end."
sentences <- strsplit(mytext,".",fixed=TRUE)[[1]]
relevant <- sentences[grepl("Date joined|commencement date",sentences)]
the_dates <- regmatches(relevant,gregexpr("[0-9]{1,2}/[0-9]{1,2}/[0-9]{2,4}",relevant))
the_first_dates <- sapply(the_dates,function(z) z[1])
中,我们有了
the_first_dates