R 在包含通配符的字符串中查找模式并转义
我现在在网上搜索了几个小时,尝试了几种选择,但没有找到令人满意的解决方案。我有一个名为tmp_txt的字符串,其中包含几篇文章,都以R 在包含通配符的字符串中查找模式并转义,r,regex,string,stringr,R,Regex,String,Stringr,我现在在网上搜索了几个小时,尝试了几种选择,但没有找到令人满意的解决方案。我有一个名为tmp_txt的字符串,其中包含几篇文章,都以 "Newspaper.com \tTopic \tXX.XX.2015\r\n\t\r\n\r\nher_goes_the_title\r\n\r\ntext_containing_\r\n\r\nsometimes" 因此,2015年XX月XX日是一个不断变化的日期(但总是在2015年) 我想找到所有的日期(XX.XX.2015)和所有的标题(here\u g
"Newspaper.com \tTopic \tXX.XX.2015\r\n\t\r\n\r\nher_goes_the_title\r\n\r\ntext_containing_\r\n\r\nsometimes"
因此,2015年XX月XX日
是一个不断变化的日期(但总是在2015年)
我想找到所有的日期(XX.XX.2015
)和所有的标题(here\u goes\u title
),以便将它们写入数据框(对应的日期和标题放在一行,但列不同)
到目前为止,我的最佳解决方案可以找到所有日期,但也可以找到其环境的一部分,例如:
dates <- str_match_all(tmp_text, "\t(.*?).2015")
等等
查找标题要困难得多,因为它们只能在每篇文章的第一个\r\n\t\r\n\r\n
-序列之后,以及在一篇文章中多次出现的\r\n\r\n
-序列之前找到
你有什么解决办法吗
先谢谢你,汉诺
第一次编辑
好的,就像伊万斯建议的,这里有一些例子:
Süddeutsche.de \tPolitik \t15.09.2013\r\n\t\r\n\r\nSyrien-Konflikt\r\n\r\nHollande dämpft Erwartungen an Chemiewaffen-Plan\r\n\r\n
日期应该是
15.09.2013
Syrien-Konflikt
Wie syrische Hacker im Netz für Assad kämpfen
标题应该是
15.09.2013
Syrien-Konflikt
Wie syrische Hacker im Netz für Assad kämpfen
如果还有一个解决方案可以获得第二个头衔,那就太好了:
Hollande dämpft Erwartungen an Chemiewaffen-Plan
Mindestens sechs Menschen sterben bei Explosion
但是,标题前面有不相关信息的情况很少:
\r\nSüddeutsche.de \tComputer \t07.09.2013\r\n\t\r\n\r\nhttp://www.sueddeutsche.de/digital/syrische-elektronische-armee-wie-syrische-hacker-im-netz-fuer-assad-kaempfen-1.1764980\r\n\r\nSyrische Elektronische Armee\r\n\r\nWie syrische Hacker im Netz für Assad kämpfen\r\n\r\n
日期应为:
07.09.2013
Syrische Elektronische Armee
03.09.2013\r\n\t\r\nKurz\r\n\r\nhttp://www.sueddeutsche.de/p
标题应为:
07.09.2013
Syrische Elektronische Armee
03.09.2013\r\n\t\r\nKurz\r\n\r\nhttp://www.sueddeutsche.de/p
第二个标题应该是
15.09.2013
Syrien-Konflikt
Wie syrische Hacker im Netz für Assad kämpfen
但是,有时不规则信息由两行组成,如下所示:
Süddeutsche.de \tPolitik \t03.09.2013\r\n\t\r\nKurz\r\n\r\nhttp://www.sueddeutsche.de/politik/syrisch-tuerkische-grenze-mindestens-sechs-menschen-sterben-bei-explosion-1.1761804\r\n\r\nSyrisch-türkische Grenze\r\n\r\nMindestens sechs Menschen sterben bei Explosion\r\n\r\nBei einer Explosion von Munition sind an der syrisch-türkischen Grenze...
日期:
标题:
Syrisch-türkische Grenze
第二个标题:
Hollande dämpft Erwartungen an Chemiewaffen-Plan
Mindestens sechs Menschen sterben bei Explosion
埃文斯提出的第一个解决方案效果良好。但是,我知道有X篇文章,现在函数返回X个日期(这是正确的),但只有X-2个标题
我不知道,哪些标题找不到。因此,我想使用一个函数,它显示日期后的前50个字符,这将帮助我通过手动搜索找到问题案例,例如
Süddeutsche.de \tPolitik \t03.09.2013\r\n\t\r\nKurz\r\n\r\nhttp://www.sueddeutsche.de/politik/syrisch-tuerkische-grenze-mindestens-sechs-menschen-sterben-bei-explosion-1.1761804\r\n\r\nSyrisch-türkische Grenze\r\n\r\nMindestens sechs Menschen sterben bei Explosion\r\n\r\nBei einer Explosion von Munition sind an der syrisch-türkischen Grenze...
报税表应为:
07.09.2013
Syrische Elektronische Armee
03.09.2013\r\n\t\r\nKurz\r\n\r\nhttp://www.sueddeutsche.de/p
如果你有更好的解决办法,我很乐意知道
如果还有问题,请随时提问。如果您需要上传txt.file,请告诉我
干杯,汉诺这取决于日期和标题之前的结构有多僵硬。你提到了标题的不同,所以如果你能在一个向量中为我们提供更多的字符串,以及所需的输出标题,那就太好了 如果一致,您可以使用不匹配的组删除您不感兴趣的零件,例如
txt <- "Newspaper.com \tTopic \t12.02.2015\r\n\t\r\n\r\nher_goes_the_title\r\n\r\ntext_containing_\r\n\r\nsometimes"
library(stringi)
before_date <- "Newspaper.com \tTopic \t"
# non-matching bit before. Getting number in format nn-nn-nnnn
date <- stringi::stri_extract_first_regex(txt,
sprintf("(?<=%s)\\d{2}.\\d{2}.\\d{4}",
before_date))
date
before_title <- sprintf("%s%s\r\n\t\r\n\r\n", before_date, date)
# find all characters not \r or \n and return, after the initial sequence
title <- stringi::stri_extract_first_regex(txt,
sprintf("(?<=%s)[^\\r\\n]*",
before_title))
title
txt一个基本的R解决方案。使用Jonny的txt
txt作为标题,这些“序列”是文字吗?也就是说,如果您查找文本\r\n\t\r\n\r\n
和\r\n\r\n
并将所有文本放在它们之间,您就会得到标题?标题大部分是文本,但有时包含“
或开头的数字,以获得这个非常快速的答案和良好的工作解决方案!不幸的是,我现在肯定发现了一些不规则的地方,因为我的剧本比预期少了两个标题。所以我想在错误位置的日期后找到40个符号。我在查找日期的终端之后添加了\\s+((?:\\w+(?:\\s+|$){40}),但它不能正常工作。有什么建议吗?我甚至无法在没有看到产生问题的原因的情况下提供帮助!这是一个很好的例子,说明什么时候单元测试原理可能是合适的:提供几个例子,包括(1)应该正好匹配一个;(2) 看起来相似,但不应匹配;(3) 可能匹配多个;等。请编辑您的问题,并包括更多的例子。