Regex 用正则表达式提取R中的重复短语

Regex 用正则表达式提取R中的重复短语,regex,r,stringr,Regex,R,Stringr,我试图通过使用下面的代码定位(然后提取)一个重复的短语。我需要以“大约”开头,以“关闭”结尾的短语 例如,“总资产约为1.629亿美元,总存款约为1.445亿美元” str\u locate(x),(\b[Aa]approximaly\b)(.*)(\b[Cc]losed\b) 上面的代码返回短语起点和终点的NA。 这是短语所在的字符向量示例。(这是一个公开的FDIC信息网页) “206-4662)。\r\n\r\n十二月\r\n\r\n\r\n总资产约1.629亿美元、存款总额约1.445亿美

我试图通过使用下面的代码定位(然后提取)一个重复的短语。我需要以“大约”开头,以“关闭”结尾的短语

例如,“总资产约为1.629亿美元,总存款约为1.445亿美元”

str\u locate(x),(\b[Aa]approximaly\b)(.*)(\b[Cc]losed\b)

上面的代码返回短语起点和终点的NA。 这是短语所在的字符向量示例。(这是一个公开的FDIC信息网页)

“206-4662)。\r\n\r\n十二月\r\n\r\n\r\n总资产约1.629亿美元、存款总额约1.445亿美元的亚利桑那州菲尼克斯市西部国家银行已关闭。华盛顿联邦银行、华盛顿州西雅图市已同意承担除某些经纪存款以外的所有存款。\r\n(PR-195-2011)\r\n\r\n\r\n\r\n佛罗里达州克雷斯特维尤翡翠海岸Premier社区银行已关闭,总资产约1.26亿美元,存款总额约1.112亿美元。佛罗里达州巴拿马城新罕布什尔州顶峰银行已同意承担所有存款。\r\n(PR-194-2011)


我可能不正确地使用了reg表达式,因为我是新手,所以非常感谢您的建议。

\b
是ASCII退格。如果希望反斜杠表示“单词边界”,则需要避开反斜杠:

此外,您不需要在关键字周围加括号,除非您以后想检查它们的大小写。在正则表达式中使用
perl()
函数时,可以不区分大小写地匹配
(?i)
修饰符

最后,请注意,如果在
大约
关闭的
之间存在换行符,则
*
将不匹配(这可以通过
(?s)
)进行修复),如果字符串中存在多对关键字,则可能会产生不需要的结果

因此,您可能应该将正则表达式更改为

str_locate(x, perl("(?is)\\bapproximately\\b(.*?)\\bclosed\\b"))

\b
是ASCII退格。如果希望反斜杠表示“单词边界”,则需要避开反斜杠:

此外,您不需要在关键字周围加括号,除非您以后想检查它们的大小写。在正则表达式中使用
perl()
函数时,可以不区分大小写地匹配
(?i)
修饰符

最后,请注意,如果在
大约
关闭的
之间存在换行符,则
*
将不匹配(这可以通过
(?s)
)进行修复),如果字符串中存在多对关键字,则可能会产生不需要的结果

因此,您可能应该将正则表达式更改为

str_locate(x, perl("(?is)\\bapproximately\\b(.*?)\\bclosed\\b"))

感谢您的快速响应,Tim,您能否详细说明如何在str_locate()中包含perl函数?这个特定的包中似乎没有perl选项it@user1176697:不是吗?但是第4页已经描述过了。感谢您的快速响应,Tim,您能否详细说明如何在str_locate()中包含perl函数?这个特定的包中似乎没有perl选项it@user1176697:不是吗?但第4页有描述。
str_locate(x, perl("(?is)\\bapproximately\\b(.*?)\\bclosed\\b"))