Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在包含通配符的字符串中查找模式并转义_R_Regex_String_Stringr - Fatal编程技术网

R 在包含通配符的字符串中查找模式并转义

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

我现在在网上搜索了几个小时,尝试了几种选择,但没有找到令人满意的解决方案。我有一个名为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 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) 可能匹配多个;等。请编辑您的问题,并包括更多的例子。